鉴于文件:
// file: q7a.h
static int err_code = 3;
void printErrCode ();
///////////// END OF FILE /////////////////
// file: q7a.c
#include <stdio.h>
#include "q7a.h"
void printErrCode ()
{
printf ("%d ", err_code);
}
///////////// END OF FILE /////////////////
// file: q7main.c
#include "q7a.h"
int main()
{
err_code = 5;
printErrCode ();
return 0;
}
///////////// END OF FILE /////////////////
输出结果为:
3
我的问题是为什么输出不是5? 感谢。
答案 0 :(得分:4)
静态全局对象的范围仅限于当前编译单元。在这种情况下,您有两个编译单元,每个.c文件一个,每个都有自己的err_code。
答案 1 :(得分:3)
static
的{{1}}关键字指定静态链接,即该变量对于翻译单元是本地的。
当您分别编译文件err_code
和q7a.c
时,会有两个不同的q7main.c
变量。因此err_code
中的printErrCode
函数仅在q7a.c
范围内使用err_code
。
答案 2 :(得分:0)
输出不是5,因为全局变量不好。
试试这个,不要在任何地方声明err_code并替换main()
中的来电:
void printErrCode (int err_code)
{
printf ("%d ", err_code);
}
int main ()
{
/* ... */
printErrCode(5);
/* ... */
}