标签:使用 strong io 文件 ar 代码 c++ c
例如,在C++中,函数 void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为 _foo_int_float。同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。
未加extern "C"声明时的连接方式,在连接阶段,连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这样的符号!
在模块B的实现文件中仍然调用foo( 2,3 ),其结果是:模块A编译生成foo的目标代码时,没有对其名字进行特殊处理,采用了C语言的方式;
链接器在为模块B的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。
如果在模块A中函数声明了foo为extern "C"类型,而模块B中包含的是extern int foo( int x, int y ) ,则模块B找不到模块A中的函数;反之亦然。
【C/C++】关键字extern,布布扣,bubuko.com
标签:使用 strong io 文件 ar 代码 c++ c
原文地址:http://www.cnblogs.com/jasonJian/p/3889799.html