请问一个关于全局变量使用的有关问题

请教一个关于全局变量使用的问题
各位好,问题如下

  最近做了一个常驻程序,初衷是:用一个全局变量控制程序大循环,初始值是1(循环继续),当收到SIGTERM信号的时候,在绑定的回调函数里将全局变量的值改成0,使程序大循环结束,常驻程序终了。
注:1,全局变量定义在大循环所在的文件(loop.h)里:static volatile sig_atomic_t g_loop_flg = 1;
  2,信号回调函数所在文件(main.cpp)包含大循环所在文件,即包含了全局变量

现在问题是:当收到SIGTERM信号的时候,在回调函数里确实将全局变量变成0了(将全局变量打印到屏幕),但在大循环处判断全局变量的值的时候,始终还是1(值没变),不知道是为什么,请各位大侠指教,谢谢。

PS.volatile关键字已经加了

------解决方案--------------------
static volatile sig_atomic_t g_loop_flg = 1;
你保证你在回调函数里设置的全局变量和大循环处的全局变量是一个变量吗?去掉全局变量定义时的static试试
------解决方案--------------------
那个 static 就是让每个 .c 文件对应的编译单元都得到一份单独的副本了。
------解决方案--------------------
全局变量绝大部分情况下,不要用static修饰
------解决方案--------------------
如果想把那个变量放在某个类里面,以达到同样的效果,那么它就通常需要用static去修饰。
------解决方案--------------------
探讨
非常感谢两问神速回答,难道是加了static这败家玩意引起的?

------解决方案--------------------
另外,静态全局变量,其实并不是“全局的”,它只在当前文件中可见。
------解决方案--------------------
但是他是static的,只能在本文件中。。。
------解决方案--------------------
应该是static的问题,这里你使用回调,如果使用线程,还要注意加锁
------解决方案--------------------
建议不要加在头文件里,在作用域外面不就可以了?反正只是计数用嘛
------解决方案--------------------
探讨

感谢各位回答,小弟还有个疑问:

在main.cpp里是通过include包含的全局变量(#include loop.h),所以用的不就应该是同一个变量么?谢谢