误区一:gcc只能编译C代码,g++只能编译c++代码
- 俩个都可以
- 后缀为.c的,gcc把它当作是C程序,而g++当作是C++程序;后缀为.cpp的,俩个都会认为是C++程序
- 编译阶段 g++会调用gcc,对于c++代码,二者是等价的。但是因为gcc命令不能自动和C++程序使用的库链接,所以通常用g++完成链接。
误区二:gcc不会定义__cplusplus宏,而g++会
- 实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所诉,如果后缀为.c并且采用gcc编译器,则该宏就是未定义的。否则就是已定义的。
误区三:编译只能用gcc,链接只能用g++
- 编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++.因为gcc命令不能自动和C++程序使用的库链接。g++会自动调用gcc二者等价。
误区四:extern "C" 与 gcc/g++有关系
- 实际上并没有关系,无论是gcc还是g++,用extern "C" 时,都是以C的命名方式来为symbol命名,否则都是c++方式命名。
实际上
g++ == gcc -xc++ -lstdc++ -shared-libgcc