大家在学习C语言或C++时一定都学过extern关键字,它是用来声明一个函数或变量在本模块和其他模块中皆可用。除此之外,还可以进行链接指定。也就是说,当编译器编译时遇到了,不会立即报错,而是在链接阶段到目标模块找到。
虽然说C++和C有许多相似的地方,但C++毕竟还是面向对象的语言,它支持函数重载,而C则不支持。细节上体现在编译后在函数库中保存的名字不同,同一个函数名C++会在名字后面加上变量的类型标志加以区分,如_name_int_int。
同理,C++还支持类成员变量和全局变量。当这些变量同名时,编译器处理的方式和处理函数的方式类似,总之每个变量都会取一个特定的名称用于编译。
为了实现C++和C,甚至是和其他语言混合编程,当C++需要调用C语言代码时,就需要在前面加上extern "C"。
在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。
如果想要看一下具体实现过程,可以考虑看看汇编代码,会直白地表现出来。
在此,给我们的C++之父鼓个掌,在创造C++时便考虑到了处理原有的大量的C代码的问题,可谓非常善解人意。
1626



被折叠的 条评论
为什么被折叠?



