extern “C”用于C++中按C语言方式编译函数,避免名字修饰问题。它使C++能调用C函数或被C调用,需在头文件中用__cplusplus宏包裹,仅适用于全局函数和变量,不可用于类成员或重载函数。

在C++中使用 extern “C” 主要是为了实现C++代码与C代码的混合编译,解决C++编译器对函数名进行“名字修饰(name mangling)”的问题。C语言不进行名字修饰,而C++为了支持函数重载会改变函数名,导致链接时找不到C函数。
extern “C” 的作用
extern “C” 告诉C++编译器:这部分函数或变量按照C语言的方式进行编译和链接,即不进行名字修饰,保持原始函数名。
注意: C++支持函数重载,C不支持。因此用 extern “C” 声明的函数不能重载。
基本使用方法
常见于头文件中,用于包含C语言编写的函数声明。
1. 单个函数声明:
立即学习“C++免费学习笔记(深入)”;
extern “C” void my_c_function();
extern “C” int add(int a, int b);
2. 多个函数批量声明(推荐写法):
extern “C” {
void func1();
int func2(int x);
double calculate(double a, double b);
}
在头文件中正确使用 extern “C”
如果你有一个C语言写的库(比如 mylib.h 和 mylib.c),想在C++程序中调用,需要在头文件中做兼容处理。
示例 mylib.h:
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern “C” {
#endif
void say_hello();
int add_numbers(int a, int b);
#ifdef __cplusplus
}
#endif
#endif // MYLIB_H
解释:
__cplusplus 是C++编译器定义的宏。 当这个头文件被C++编译器包含时,会加上 extern “C”,按C方式链接。 当被C编译器包含时,extern “C” 不会被引入(因为C不认识),避免编译错误。
实际调用示例
C语言实现文件 mylib.c:
#include
#include “mylib.h”
void say_hello() {
printf(“Hello from C!n”);
}
int add_numbers(int a, int b) {
return a + b;
}
C++调用文件 main.cpp:
#include “mylib.h”
int main() {
say_hello();
int result = add_numbers(3, 5);
return 0;
}
编译命令(假设用g++):
gcc -c mylib.c -o mylib.o
g++ main.cpp mylib.o -o program
注意事项
extern “C” 只能用于全局函数和变量,不能用于类成员函数。 不能用 extern “C” 声明重载函数,否则编译报错。 extern “C” 不改变C++函数的调用约定,只影响名字修饰。 如果C++函数要被C代码调用,该函数也必须用 extern “C” 声明,并且使用C兼容的数据类型。基本上就这些。只要在混合编译C和C++时记得用 extern “C” 包装C的接口声明,就能顺利链接。
以上就是c++++怎么使用extern “C”_c++ extern “C”使用方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477250.html
微信扫一扫
支付宝扫一扫