静态字段 - 初始化和更改值

时间:2010-10-03 11:30:38

标签: c static-members

鉴于文件:

// 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? 感谢。

3 个答案:

答案 0 :(得分:4)

静态全局对象的范围仅限于当前编译单元。在这种情况下,您有两个编译单元,每个.c文件一个,每个都有自己的err_code。

答案 1 :(得分:3)

static的{​​{1}}关键字指定静态链接,即该变量对于翻译单元是本地的。

当您分别编译文件err_codeq7a.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);
    /* ... */
}