shared global variables in C
如何创建在C中共享的全局变量?如果我把它放在头文件中,那么链接器会抱怨变量已经被定义。唯一的方法是在我的一个C文件中声明变量,并在所有其他要使用它的C文件的顶部手动放入
在一个头文件(shared.h)中:
1 | extern int this_is_global; |
在每个要使用此全局符号的文件中,包含包含外部声明的头文件:
1 | #include"shared.h" |
为了避免多个链接器定义,必须在编译单元(例如:shared.cpp)中只存在一个全局符号声明:
1 2 3 | /* shared.cpp */ #include"shared.h" int this_is_global; |
在头文件中用
在头文件中
头文件
1 2 3 4 5 6 7 8 | #ifndef SHAREFILE_INCLUDED #define SHAREFILE_INCLUDED #ifdef MAIN_FILE int global; #else extern int global; #endif #endif |
在包含文件的文件中,您希望全局保存:
1 2 | #define MAIN_FILE #include"share.h" |
在其他需要外部版本的文件中:
1 | #include"share.h" |
您将声明放在头文件中,例如
1 | extern int my_global; |
在一个.c文件中,您在全局范围内定义它。
1 | int my_global; |
想要访问
如果在C和C++之间共享代码,请记住将以下内容添加到EDCOX1×4文件中:
1 2 3 4 5 6 7 8 9 10 | #ifdef __cplusplus extern"C" { #endif extern int my_global; /* other extern declarations ... */ #ifdef __cplusplus } #endif |
只有一个头文件是一种更干净的方法,因此维护起来更简单。在带有全局变量的头文件中,每个声明前面都有一个关键字(我使用common),然后在一个源文件中像这样包含它
1 2 3 | #define common #include"globals.h" #undef common |
以及其他类似的源文件
1 2 3 | #define common extern #include"globals.h" #undef common |
只需确保不要初始化globals.h文件中的任何变量,否则链接器仍会抱怨,因为即使使用extern关键字,初始化的变量也不会被视为外部变量。global.h文件与此类似
1 2 3 4 | #pragma once common int globala; common int globalb; etc. |
似乎适用于任何类型的声明。当然,不要在定义上使用通用关键字。