1 extern 关键字的基本作用
第一种用法:
在与"C"一起使用时,例如 extern "C" void fun(int a, int b),这告诉编译器在编译函数fun时按照C语言的规则进行编译,而不是C++的规则。C++对函数名的翻译可能导致fun这个名字变得面目全非,例如可能是fun@aBc_int_int#%$,具体取决于编译器的实现方式。为什么要这样做呢?因为C++支持函数的重载,这个问题不在此过多讨论,如果感兴趣可以进行网上搜索,相信你会找到满意的解释。
💡 告诉编译器用C的规则去编译这个函数!
第二种用法:
当extern不与"C"一起用于修饰变量或函数时,例如在头文件中 extern int g_Int,其作用是声明函数或全局变量的作用范围的关键字。声明的函数和变量可以在本模块或其他模块中使用,需要注意这是一个声明而不是定义。换言之,如果模块B想引用模块A中定义的全局变量或函数,只需包含A模块的头文件即可。在编译阶段,虽然模块B找不到该函数或变量,但不会报错;连接时会从模块A生成的目标代码中找到此函数。
💡 在A头文件中声明此变量或函数,则其他模块B包含A头文件后可直接使用此变量或函数,无需再在B中extern声明此变量或函数。
第三种用法:
extern可以置于变量或函数前,以标示变量或函数的定义在其他文件中,从而提示编译器在其他模块中寻找其定义。此外,extern也可用于进行链接指定。
💡 若模块B想在不包含A头文件的前提下直接使用A的变量或函数,就需要单独使用extern type func();来声明。然而这种做法是不推荐的,详见下方解释。

最低0.47元/天 解锁文章
877

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



