当前位置:首页 > 问问

为什么要声明extern c 为何需要使用extern c

1、为什么要声明extern c

在介绍为什么要声明extern C之前,先要了解C++中的name mangling(命名修饰)。name mangling是指编译器在编译函数或者变量时,会根据函数或变量的类型、参数个数和参数类型等信息来修饰(或者称为重载)函数或变量的名称。这么做的原因是C++支持函数重载,而函数重载需要根据类型、参数个数和参数类型等信息区分同名函数。

但是,这样做也造成了一些问题。比如,当C++代码需要链接C语言库时,因为C语言不支持函数重载,使用C++编写的函数名称被改编后与C语言库函数的名称不一样了,会导致链接失败。

2、声明extern C的作用

为了解决上述问题,C++提供了extern "C"修饰符。使用extern "C"修饰的代码告诉编译器编译这部分代码时按照C语言规则进行编译,避免命名修饰而导致的链接错误。

还有一种情况,即C++程序要调用其他语言编写的函数库,比如Fortran、Cobol、Pascal等,同样需要使用extern "C"来修饰函数声明,以保证函数名称与其它语言的函数名称一致。

3、extern "C"的用法

C++中通过在函数外面使用extern "C"声明,将指定函数声明为C语言类型的函数,使用C语言链接规则。extern "C"可以应用在函数声明前、定义前或者定义时。例如:

extern "C" void func0();

extern "C" int func1(int a, char b);

extern "C" {

//函数定义

}

4、注意事项

需要注意,对于带参数的函数,参数类型、个数、顺序等要和对应的C语言函数保持一致,否则链接时仍然会出现问题。同时,如果函数内部有C++特有的代码,例如STL容器、析构函数等,还是会影响到执行效率甚至会出现错误。因此,在使用extern "C"的时候,需要谨慎而且小心。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章