extern "C"表示编译生成的内部符号名使用C约定。因为 C 语言和 C++ 语言的编译规则不一样,所以要告诉系统哪些函数是用 C 方式编译,哪些函数需要用 C++ 方式编译。如果你不加 extern "C" ,在编译时,系统会提示找不到此函数。这也是为什么,我们可以在c++,使用C语言的编写的库。你可以在你的系统找到C语言的头文件,stdio.h。打开开一下,会发现有个如下几行。
#ifdef __cplusplus
extern "C"{
#endif
...
#ifdef __cplusplus
}
#endif
这样就可以在用C++编译器链接外部符号时,告诉编译器这是用C语言编写的。然后使用C语言的内部符号约定寻址这个地址。C语言的寻址规则是
例如:int foo(int x , int y);那么C语言会产生_foo符号,而C++由于要支持函数重载,大概会生成_foo_int_int符号。知道这些,我们在写程序时,也可以模拟去这样写头文件之类的。