全部博文(78)
分类: C/C++
2013-05-13 14:03:37
原文地址:c/c++ 混合编程的 extern “C” 作者:fussfuss1
通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:
#ifdef __cplusplus
extern "C" {
#endif
/**** some declaration or so *****/
#ifdef __cplusplus
}
#endif /* end of __cplusplus */
其中的extern "C"是什么意思呢?
通过学习知道原来是c++函数调用c语言的函数模块时申明用c语言的符号表!因为c++为了实现函数的重载(相同的函数名不同的参数)会把函数如int add(int x,int y)定义为类似_Z3addii的符号表(函数名外加每个参数的类型,不同的编译器符号表可能不同,此为g++的符号表),而c的函数符号表为add(不同的编译器符号表可能不同,此为gcc的符号表)。故如果当c++代码调用c的函数时就会因为找不到对应的符号表而出错。
代码如下:
C的头文件
/*-----------c.h--------------*/C的源文件
/*-----------c.c--------------*/C++的调用
/*-----------cpp.cpp--------------*/
编译时报错:(注:用g++时不会报错,下面解释)
$ gcc cpp.cpp c.c -lstdc++
/tmp/ccNJ5gxW.o: In function ‘main':
cpp.cpp:(.text+0x19): undefined reference to ‘add(int, int)'
collect2: ld returned 1 exit status