我在源文件 test_1.c 中有一个static
变量声明为:
static char var1 = 0;
我需要从源文件 test_2.c 访问此变量的当前值。所以,我做了类似的事情:
在test_1.c
中static char var1 = 0;
volatile char var_another = var1;
并在 test_2.c 中,我将变量 var_another 声明为extern
并访问它:
extern volatile char var_another;
这是正确的方法吗?
答案 0 :(得分:3)
static
和extern
是互斥的。如果您想从其他文件访问static char var1
,则必须删除static
,然后将其设为常规全局。您根本不需要volatile
。
或者,您可以创建一个访问函数,该函数返回static char var1
的值并使用其他模块中的值。
附注:externs和导出的函数原型通常应该放在头文件中。
答案 1 :(得分:3)
没有! static
(在此上下文中)的重点在于您声明该变量仅在此翻译模块中可见。
如果您不想要此行为,请不要将其声明为静态。将char var1 = 0;
放在源文件中,将extern var1;
放在关联的头文件中。
更一般地说,根本不要这样做。在源文件之间访问全局变量可能是一种灾难。