500万彩票网

OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛500万彩票网 » 嵌入式开发 » FPGA » C语言里extern"C"是什么意思?

共5条 1/1 1 跳转至

C语言里extern"C"是什么意思?

助工
2020-09-09 23:56:10    评分

经常在C语言的头文件中看到下面的代码:

#ifdef __cplusplus extern "C" { #endif // all of your legacy C code here #ifdef __cplusplus } #endif

这通常用于C++++和C混合编程的时候,为了防止C++的编译器在编译C文件的时候出现错误;众所周知,C++可以进行函数名重载,但是C则没有这种功能,那这和extern "C"又有什么关系呢?
先看下面这个表格,如下所示;

未添加 extern "C"

test。h

#ifndef TEST_H #define TEST_H void foo1(void); void foo2(void); void foo3(int i); #endif

test.c

void foo1(void){} void foo2(void) {} void foo3(int i){} int main(int argc,char** argv){    foo1();  foo2();  foo3(1);   return 0; }

编译这两个文件,生成test.o文件,通过objdump查看函数符号;

g++ -c test.c test.h objdump -t test.o

可以看到函数符号已经被编译器修改了;

添加extern "C"

test.h

#ifndef TEST_H #define TEST_H #ifdef __cplusplus extern "C" { #endif void foo1(void); void foo2(void); void foo3(int i); #ifdef __cplusplus } #endif #endif

test.c

#ifdef __cplusplus extern "C" { #endif void foo1(void){} void foo2(void) {} void foo3(int i){} #ifdef __cplusplus } #endif int main(int argc,char** argv){    foo1();  foo2();  foo3(1);   return 0; }

编译这两个文件,生成test。o文件,通过objdump查看函数符号;

g++ -c test.c test.h objdump -t test.o

这时候函数符号是正确的;

extern "C" 是告诉C++的编译器不要打我这些C函数的主意。




助工
2020-09-10 23:03:35    评分
2楼

原来如此


助工
2020-09-13 23:45:26    评分
3楼

感谢分享


助工
2020-09-15 00:30:15    评分
4楼

学到了


助工
2020-09-15 23:41:39    评分
5楼

原来如此


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
玖玖棋牌游戏 北京pk10 幸运时时彩 五分时时彩 幸运时时彩官网 一分时时彩官网 亿信彩票开奖 小米彩票开奖 北京pk10 五分时时彩