栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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("%dn",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++


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982462.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号