C++ extern “C“ 用法
2023-12-13 10:36:59
extern “C”
由于c++中需要支持函数重载,所以c和c++中对同一个函数经过编译后生成的函数名是不相同的
extern “C” 的主要作用就是为了实现c++代码能够调用其他 c 语言代码。
1(不常用)
//告诉编译器 show() 函数按c语言的方式进行编译和链接
extern "C" void show();
2(常用)
// C头文件中使用
#if __cplusplus
extern "C"{
#endif
//放 C头文件声明
//void func1();
//...
#if __cplusplus
}
#endif
其他
在Linux下测试:
c函数: void MyFunc(){} ,被编译成函数: MyFunc
c++函数: void MyFunc(){},被编译成函数: _Z6Myfuncv
由于c++中需要支持函数重载,所以 c 和 c++ 中对同一个函数经过编译后生成的函数名是不相同的。
这就导致了一个问题,如果在 c++ 中调用一个使用 c 语言编写模块中的某个函数,
那么 c++ 是根据 c++ 的名称修饰方式来查找并链接这个函数,那么就会发生链接错误。
以上例,c++ 中调用 MyFunc 函数,在链接阶段会去找 _Z6Myfuncv,结果是没有找到的,
因为这个 MyFunc 函数是c语言编写的,生成的符号是 MyFunc。
所以
extern "C"的主要作用就是为了实现 c++ 代码能够调用其他 c 语言代码。
加上extern "C"后,这部分代码编译器按c语言的方式进行编译和链接,而不是按c++的方式。
文章来源:https://blog.csdn.net/CYS_2020/article/details/134939135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!