您的位置:首页 > 编程语言 > C语言/C++

c++ 知识点--extern "C"的作用

2010-07-15 14:09 337 查看
因为C、C++的编译器对函数名的修饰不同,为了保证在C、C++中编写的函数能够被互相调用,所以采用这个链接指示符

以int func(int, int)为例,C的编译器会将名字改编为_func, 而C++的编译器会改编为_func_int_int 或_funcii(各编译器不同)。

如果这个函数在C中编译成库,目标文件中函数名为_func,当这个函数中C++中被调用时,C++ 的编译器就会到目标文件中

寻找_funcii,结果找不到,出错。

所以为了防止这种问题,在C++调用时,将函数声明前加个extern "C" 告诉C++的编译器,不要

对名字再进修饰,而直接去找_func。

同样在C++中编译的函数,如果想让C来使用,通常也加上extern "C"在编译时将函数名按C的风格进行修饰。

通常C中编写的函数如果有在其它语言中使用的可能,通常会有下面形式的声明:

#ifdef __cplusplus

extern "C" {

#endif

/**** some declaration or so *****/

#ifdef __cplusplus

}

#endif /* end of __cplusplus */

即在声明时已经加上extern "C" 而不需要调用时麻烦。例如在VC++中调用C的库函数就不用作特别的声明。

extern "C"的使用要点

1. 可以是单一语句

extern "C" double sqrt(double);

2. 可以是复合语句, 相当于复合语句中的声明都加了extern "C"

extern "C"

{

double sqrt(double);

int min(int, int);

}

3.可以包含头文件,相当于头文件中的声明都加了extern "C"

extern "C"

{

#i nclude <cmath>

}

4. 不可以将extern "C" 添加在函数内部

5. 如果函数有多个声明,可以都加extern "C", 也可以只出现在第一次声明中,后面的声明会接受第一个链接指示符的规则。

6. 除extern "C", 还有extern "FORTRAN" 等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 知识点 休闲