关于g++和gcc的一些误区

关于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

4)认为extern "C" 和gcc或者g++有关系,其实无论哪个在使用extern "C"的时候都会采用c的规范来约束


  
  
  1. //me.h
  2. extern "C" void CppPrintf(void);

  
  
  1. //me.cpp
  2. #include <iostream>
  3. #include "me.h"
  4. using namespace std;
  5. void CppPrintf(void) {
  6.    cout << "Hello" << endl;
  7. }

  
  
  1. //test.cpp
  2. #include "me.h"
  3. int main(void){
  4.    CppPrintf();
  5.    return 0;
  6. }
先在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++的规范

所以,是编译是无关的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值