静态字段 - 初始化和更改值
给定文件:
// 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? 谢谢。
Given the files:
// 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 /////////////////
The output is:
3
My Question is why the output is not 5?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
静态全局对象的范围仅限于当前编译单元。在这种情况下,您有两个编译单元,每个 .c 文件一个,每个编译单元都有自己的 err_code。
static global objects have scope limited to the current compilation unit. In this case you have two compilation units, one for each .c file, and each one has its own err_code.
err_code
的static
关键字指定静态链接,即变量对于翻译单元来说是本地的。当您分别编译文件
q7a.c
和q7main.c
时,将会有两个不同的err_code
变量。因此,q7a.c
中的函数printErrCode
使用仅在q7a.c
范围内可见的err_code
。The
static
keyword forerr_code
specifies static linkage, i.e. the variable is local to the translation unit.As you're compiling files
q7a.c
andq7main.c
separately, there will be two differenterr_code
variables. Hence the functionprintErrCode
inq7a.c
is usingerr_code
visible only within theq7a.c
scope.输出不是 5,因为全局变量不好。
试试这个,不要在任何地方声明 err_code 并替换
main()
中的调用:The output is not 5, because global variables are bad.
Try this, without declaring err_code anywhere and replacing the call in
main()
: