C++调用C函数,为什么要加extern "C"?
2011-08-02 00:14:28
分类: C/C++
在C++程序中调用被C编译器编译后的函数,为什么要加extern "C"?
C++语言支持函数重载,C语言不支持函数重载,函数被C++编译器编译后在
库中的名字与C语言的不同,假设某个函数原型为:
- void foo(int x, inty);
该函数被C编译器编译后在库中的名字为:
- _foo
而C++编译器则会产生像:
- _foo_int_int
之类的名字。为了解决此类名字匹配的问题,C++提供了C链接交换指定符号 extern "C"。
eg:
-
- #ifdef __cplusplus
- #if __cplusplus
- extern "C" {
- #endif
- #endif
- ...
- ...
- ...
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif