关于g++和gcc的误区:
1)认为g++只能编译c++ gcc只能编译c其实,都可以的,但应该注意
a. .c文件g++把它当成c++程序,gcc当成c程序 .cpp文件 都认为是c++程序,c++是C的超集
b. 编译阶段g++会调用gcc,对于c++文件,两者是等价的,但gcc不能自动和c++的库链接,只能使用g++
2)gcc不会定义 __cplusplus宏,其实只要是.cpp文件用gcc或者g++编译都会定义
3)编译只能使用gcc,链接只能使用g++ 其实,编译阶段g++和gcc等价,链接可以使用g++或者gcc-lstdc
1)认为g++只能编译c++ gcc只能编译c其实,都可以的,但应该注意
a. .c文件g++把它当成c++程序,gcc当成c程序 .cpp文件 都认为是c++程序,c++是C的超集
b. 编译阶段g++会调用gcc,对于c++文件,两者是等价的,但gcc不能自动和c++的库链接,只能使用g++
2)gcc不会定义 __cplusplus宏,其实只要是.cpp文件用gcc或者g++编译都会定义
3)编译只能使用gcc,链接只能使用g++ 其实,编译阶段g++和gcc等价,链接可以使用g++或者gcc-lstdc
4)认为extern "C" 和gcc或者g++有关系,其实无论哪个在使用extern "C"的时候都会采用c的规范来约束
//me.h
extern "C" void CppPrintf(void);
//me.cpp
#include <iostream>
#include "me.h"
using namespace std;
void CppPrintf(void) {
cout << "Hello" << endl;
}
//test.cpp
#include "me.h"
int main(void){
CppPrintf();
return 0;
}
先在me.h中加上extern "C" 分别用
g++ -S me.cpp 编译和 less me.c查看
gcc -S me.cpp 编译和 less me.c查看 ,可以发现都包含 .type CppPrintf,@function也就是采用C的规范
去掉extern "C" 再分别使用
g++ -S me.cpp 编译和 less me.c查看
gcc -S me.cpp 编译和 less me.c查看 ,可以发现都包含 .type _Z9CppPrintfv,@function也就是采用C++的规范
所以,是编译是无关的