引入:
编译器默认将*.cpp源文件采用c++方式编译;编译器默认将*c源文件采用c编译器。
在c++与c混合编程时,在*.h与*.cpp文件如果需要指定使用c编译器编译需要使用#ifdef __cplusplus extern "C" #endif
问题:
如果在*.c文件中想使用c++编译器编译应该怎么设置(不修改文件后缀名的情况下)?
原因:
开发环境:Visual Studio 2015 + VisualGDB (编译器为arm-eabi GCC 7.2.0)+ STM32CubeMX
STM32CubeMX生成文件都是*.c源文件,这么才能使用在*.c源文件里面使用c++特性的东西(不修改文件后缀名的情况下)。
GNU兼容的编译器是-x language <文件名>-x language
Specify explicitly the language for the following input files (rather than lettingthe compiler choose a default based on the file name suffix). This option appliesto all following input files until the next ‘-x’ option. Possible values for languageare:c c-header cpp-outputc++ c++-header c++-cpp-outputobjective-c objective-c-header objective-c-cpp-outputobjective-c++ objective-c++-header objective-c++-cpp-outputassembler assembler-with-cppadaf77 f77-cpp-input f95 f95-cpp-inputgobrig-x none Turn off any specification of a language, so that subsequent files are handledaccording to their file name suffixes (as they are if ‘-x’ has not been used at
all).
微软的cl是
/Tc /TC 指定 C 源文件。
/Tp /TP 指定 C++ 源文件。
详见: https://msdn.microsoft.com/zh-cn/library/19z1t1wy.aspx https://msdn.microsoft.com/zh-cn/library/032xwy55.aspx
还有, visual studio 的 C 编译器不支持 C99, 还是用Clang/C2 吧 (=・ω・=)
一周热门 更多>