所在的位置: C++ >> C++优势 >> externc的用法解析

externc的用法解析

公益中科 http://ask.bdfyy999.com/

在使用C++进行编码时,有时会看到externC字段,它代表的是什么含义呢?让我们一起来学习下:

externC包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。

(1)被externC限定的函数或变量是extern类型的

(2)被externC修饰的变量和函数是按照C语言方式编译和连接的

未加extern“C”声明时的编译方式

首先看看C++中对类似C的函数是怎样编译的。

作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:

voidfoo(intx,inty);

该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangledname”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数voidfoo(intx,inty)与voidfoo(intx,floaty)编译生成的符号是不相同的,后者为_foo_int_float。

同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以.来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。

C和C++对函数的处理方式是不同的:externC是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用externC来进行说明了。

以上就是为什么会加上extern“c”的原因了,你明白了没有?




转载请注明:http://www.aierlanlan.com/grrz/4130.html