Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 静态字段-初始化和更改值_C_Static Members - Fatal编程技术网

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

C 静态字段-初始化和更改值,c,static-members,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: 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 /////////////////
我的问题是为什么输出不是5?
谢谢。

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

err_代码的static关键字指定静态链接,即变量是翻译单元的本地变量

当您分别编译文件q7a.c和q7main.c时,将有两个不同的err_代码变量。因此,q7a.c中的函数printErrCode使用的是仅在q7a.c范围内可见的错误代码。

输出不是5,因为全局变量不好

尝试此操作,不要在任何地方声明错误代码并替换main中的调用:

3
void printErrCode (int err_code)
{
    printf ("%d ", err_code);
}

int main ()
{
    /* ... */
    printErrCode(5);
    /* ... */
}