extern "C" 的主要作用是为了指示编译器按c语言编译, 从而能够正确调用c语言代码. 我将试着从c/c++用与不用extern "C"分别举例来说明我对此的用法, 如有疏漏错误, 还请评论指出.
首先, 在C++文件中, 对于在头文件中的函数声明添加 extern "C", 这就表示该函数需要采用C编译, 可以编译通过, 但在module.cpp文件调用该函数时, 会因函数名不一致导致出错. 这种情况纯属画蛇添足.
1 // 模块A头文件 moduleA.h 2 3 #ifndef MODULE_A_H 4 #define MODULE_A_H 5 6 int foo(int x, int y); 7 8 #endif 9 在模块B中引用该函数:10 // 模块B实现文件 moduleB.cpp11 12 #include "moduleA.h"13 14 foo(2,3);
通常情况下, extern "C"用于c++调用c库时, 在C++源文件中的头文件包含或函数接口声明.
extern "C"{#include "cExample.h"}或extern "C"{void func(void);}
我们经常在cpp文件中见到下面这类代码就属于这种情况
#ifdef __cplusplusextern "C" {#endif//一段代码void func(void);#ifdef __cplusplus}#endif
其次,由于c语言不支持extern "C"声明, 所以 *.c文件并不能使用extern "C". 而对于C语言引用c++的函数或变量的情况, 则需要先
在头文件中添加 extern "C"声明, 其次在调用该函数的c源文件中, 再次声明该函数, 默认为extern, 所以extern可不添加, 此时在c源文件中不能通过包含头文件的方式调用该函数.
最后, extern "C"和extern完全不一样, 并不是说c语言不支持extern "C", 所以要在c源文件中以extern代替, extern也可以不写,, 详见我的另一篇文章http://www.cnblogs.com/wj742421292/p/8847368.html.
参考:
https://baike.baidu.com/item/extern%20%22C%22/15267013?fr=aladdin