extern “C” 代表双重含义:从字面意思上看,一被修饰的目标是extern,二被修饰的目标是C。

1,首先被extern “C”限定的函数或变量是extern类型的,
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。

2,被extern “C”修饰的变量和函数是按照C语言方式编译和连接的;

也就是说C和C++对于编译器来说编译的方式是不同的,作为面向对象程序语言,C++支持函数重载,而C语言不支持函数重载,即某个函数被C++编译器编译后和被C编译器编译后的名字是不同的。例如,函数的原型为:

void foo(int, int);

假如C++编译后的名字为:_foo_int_int

C编译后的名字为:_foo_

如果在C++中使用C语言提供的库函数时,在引用完头文件后,在链接时,可以无法再目标代码中找到_foo_int_int类似的函数,只能找到_foo_函数,所以会出现函数未定义的错误。

总的来说一句话:extern “C”的存在时为了C和C++能够进行混合编程。

关于extern “C” 的用途,请参看我的另一篇文章

C语言调用C++库接口的方法概述

参考资料:

http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/1121