0

给定文件:

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

4

3 回答 3

4

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

于 2010-10-03T11:35:54.667 回答
3

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

当您分别编译文件时q7a.cq7main.c将有两个不同的err_code变量。因此,函数printErrCodein仅在范围内q7a.c使用err_code可见q7a.c

于 2010-10-03T11:41:18.567 回答
0

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

试试这个,不要在任何地方声明 err_code 并替换调用main()

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

int main ()
{
    /* ... */
    printErrCode(5);
    /* ... */
}
于 2010-10-03T11:51:46.487 回答