在C中共享全局variables

我如何创build在C中共享的全局variables? 如果我把它放在一个头文件中,那么链接器会抱怨variables已经被定义了。 是唯一的方法来声明我的一个C文件中的variables,并手动把extern的所有其他C文件的顶部想要使用它? 这听起来并不理想。

在头文件中写入extern 。 并且在其中一个c文件的全局范围内声明它,而不用extern

在一个头文件(shared.h)中:

 extern int this_is_global; 

在每个要使用此全局符号的文件中,包含包含extern声明的头文件:

 #include "shared.h" 

为了避免多个链接器定义, 编译单元中必须存在一个全局符号的声明 (例如:shared.cpp):

 /* shared.cpp */ #include "shared.h" int this_is_global; 

在头文件中

头文件

 #ifndef SHAREFILE_INCLUDED #define SHAREFILE_INCLUDED #ifdef MAIN_FILE int global; #else extern int global; #endif #endif 

在文件中你想让全局生效:

 #define MAIN_FILE #include "share.h" 

在需要extern版本的其他文件中:

 #include "share.h" 

你把声明放在一个头文件中,例如

  extern int my_global; 

在你的一个.c文件中,你可以在全局范围内定义它。

 int my_global; 

每个需要访问my_global .c文件都包含带有extern的头文件。

如果您在C和C ++之间共享代码,请记住将以下代码添加到shared.h文件中:

 #ifdef __cplusplus extern "C" { #endif extern int my_global; /* other extern declarations ... */ #ifdef __cplusplus } #endif 

只有一个头文件有一个更简洁的方法,所以维护起来更简单。 在带有全局variables的头文件中,每个声明都带有一个关键字(我常用),然后在一个源文件中包含它

 #define common #include "globals.h" #undef common 

和其他任何这样的源文件

 #define common extern #include "globals.h" #undef common 

只要确保不要初始化globals.h文件中的任何variables,或者连接器仍然会抱怨,因为即使使用extern关键字,初始化variables也不会被视为外部variables。 global.h文件看起来与此类似

 #pragma once common int globala; common int globalb; etc. 

似乎适用于任何types的声明。 当然,不要在#define上使用common关键字。