在C/C++中如何使用extern关键字
content_views" class="markdown_views prism-atom-one-dark">
本篇文章介绍的是C/C++中extern关键字的用法,其中主要谈到修饰变量时的用法,可以参考一下,希望对你有所帮助。
1.基本解释
extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外,extern 也可以用来链接指定。
extern 有两个作用:(1) 当它与"C"一起连用时,如:extern “C” void func(int a);则告诉编译器在编译 func 函数名时按着 C 的规则去翻译相应的函数名而不是 C++ 的。关于这点,或许可以在《深度探索C++对象模型》一书中寻找答案;另外,在 Linux 下有一个 backtrace 函数可以打印堆栈信息,可以查看 C++ 翻译的函数名(muduo 库中有使用这个函数)。
(2) 当 extern 不与 “C” 在一起修饰变量或者函数时,如在头文件中:extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块或者其他模块中使用,记住它是一个声明不是定义!
2.当 extern 修饰变量时
正确使用方法是:在 .c 文件中定义变量,在相应的 .h 文件中进行声明。
我们通过是否会为变量来分配内存空间来判定是声明还是定义(严格来说,是单纯的分配内存,并不包括初始化部分)。那么 int i; 这句话是声明还是定义那?它既是声明,也是定义。如果我们在 test.h 文件中使用这句话,一旦在其他文件中定义 i(e.g.1),或者该文件被重复包含(e.g.2),那么就会产生重定义的错误。
/* e.g.1 以下为3个文件 */ //test.h int i; //test2.h int i; //main.cpp #include "test.h" #include "test2.h" int main() { return 0; }
/* e.g.2 以下为3个文件 */ //test.h int i; //test2.h #include "test.h" //main.cpp #include "test.h" #include "test2.h" int main() { return 0; }
相关教程:C视频教程
csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet"/>