引入: 编译器默认将*.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++特性的东西(不修改文件后缀名的情况下)。 |
据我所知没有,也可能有我没见过。正常来说都新标准兼容旧标准,.cpp可以运行.c的函数。很少反过来旧兼容新的。STM32CubeMX生成文件其实你只要修改main.c的后缀。其他都是库和硬件初始化底层代码。有关程序逻辑控制部分还是要自己新建文件。
没有这种说法吧 编译器都是一个
可能有的编译器会对后缀有要求
一般来讲一个文件里 里面写c写c++都可以 c++本来就是c的面向对象的扩展
有些关键字c标准和c++标准的定义有区别的 比如 static 这种
加个extern "C"{} 只是告诉编译器按照c的定义去理解
编译器区分cpp和c的文件原因就是为了能区分c和c++某些不同的定义
c++用c的定义用extern "C"{}
c里面怎么用c++的定义 你看看编译器文档 一般都是直接用cpp后缀
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
默认情况下,*.c文件会使用arm-xxx-gcc编译器进行编译,*.cpp文件会使用arm-xxx-g++编译器进行编译,STM32CubeMX生成文件都是*.c源文件,我现在是想在.c文件中使用c++特性(比如重载),有什么办法(不修改文件名的情况下)。
STM32CubeMX生成文件都是*.c源文件,我现在是想在.c文件中使用c++特性(比如重载),有什么办法(不修改文件名的情况下)。
这是一个好办法,以前我一直认为extern "C" {......}修饰的函数里面不能出现C++的东西,原来只是说明该函数采用c方式编译,函数里面可以出现c++特性。这样理解对吗?