[原创] c/c++ 的 extern "C"

  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.cpp
11 
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 __cplusplus
extern "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

posted @ 2018-04-15 16:10  GeneWong  阅读(388)  评论(0)    收藏  举报