以下为本实验使用的编译器版本:
系统环境为:
目的:搞清以下几个问题
1. g++能否编译c文件
2. g++编出的s文件和gcc编出来的有何异同
3. __cplusplus宏在何时被定义
4. c调用c++的注意事项
5. c++调用c的注意事项
6. 针对上述问题的makefile怎么写比较好
问题1:g++能否编译c文件
g++ -E hello.c -o g++_hello.i
gcc -E hello.c -o gcc_hello.i
用beyond compare去对比一下二者的异同,可以看到
g++_hello.i关键是多了这个extern "C" 然后把stdio.h中的函数声明和类型定义全部包住
“这个标识符的作用把标识符作用域的数据类型采用gcc去编译”
【我感觉有点不对,这可能是stdio.h中自带的#ifdef __cpluplus导致的,而不是预处理器搞的,我来看一下】
上面是预处理的部分,下面看一下编译结果的异同
gcc -S hello.c -o gcc_hello.s
g++ -S hello.c -o g++_hello.s
对比结果如下图所示,显然对于c文件的编译,g++还是对函数名动了手脚
【这里有个疑惑,为什么是.arch armv6,我的树莓派明明是armv7的架构啊? 】
可以看到,生成的汇编指令中的函数名是不同的,生成的汇编指令也不同,这里和这篇文章说的就开始有出入了
后缀为.c的文件,gcc当做c程序去编,g++当做c++程序去编
https://blog.csdn.net/qq_21792169/article/details/85097822
gcc -c hello.c -o gcc_hello.o