在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关键字。