C与C++混合编程,编译总结

C与C++混合编程,编译总结:
假设有三个文件 a.c a.h b.cpp
Ubuntu linux 上有 C语言编译器 gcc, 与c++ 编译器 g++
相关命令:  gcc -c a.c, g++ -c b.cpp, gcc a.c b.cpp -l stdc++, gcc -E a.c -o a.E, gcc -S a.c, objdump -t a.o

void func(int a, int b)
{
    printf("%d\n",a+b);
}


#ifdef __cplusplus
extern "C"                 //其中"C" 为c的大写,小写不支持
{
#endif
// C语言函数声明或实现

#ifdef  __cplusplus
}
#endif

一,  当a.c 中只有c语言程序时
    用gcc 编译会编译a成c标准程序, 这时__cplusplus 不会定义。 函数func()被编译成的符号为C语言标准 func
    用g++ 编译时, 会按c++标准进行编译, 这时__cplusplus 会被定义, 函数func()被编译成的符号为C++标准 _Z4funcii
二,  当a.c 中包含C++代码时
    用gcc 编译会出错, 这时用gcc用C语言标准进行编译,不支持c++
    用g++ 编译时, 会按c++标准进行编译, 这时__cplusplus 会被定义, 函数func()被编译成的符号为C++标准 _Z4funcii,支持c++代码
三, b.cpp 中的代码,不管只有C++代码,还是只有C语言代码, 还是两者都有
    用gcc 和g++ 编译时, 都会按c++标准进行编译, 这时__cplusplus 会被定义, 函数func()被编译成的符号为C++标准 _Z4funcii
四, 当代码用 c++标准进行编译时, 只要调用的函数声明,或定义的函数外部带有
    extern "C"
    {
        void func(int a, int b);
    }
    编译时就按C语言标准进行链接,其符号为 func, 否则为C++标准的_Z4funcii
五,  用gcc 进行链接时,如果有.o代码为C++标准编译的符号, 要加上 -l stdc++ , 否则会报找不到符号。
六,  用g++进行链接时, 不管是否有C++标准编译的符号, 不需要加 -l stdc++


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值