gpt4 book ai didi

c - c中的静态变量

转载 作者:太空狗 更新时间:2023-10-29 16:57:33 24 4
gpt4 key购买 nike

嗨我正在为我的 C 测试学习,我遇到了一个我无法找到答案的问题。

一个程序员写了一个程序来计算用户数量(Count.h,Count.c):

/******** FILE: Counter.h ***********/
static int counter = 0;
int getUsersNum ();
/******** END OF FILE: Counter.h ****/

/******** FILE: Counter.c ***********/
#include "Counter.h"
int getUsersNum ()
{
return counter;
}
/******** END OF FILE: Counter.c ****/

还有一个测试人员来测试它:

/******** FILE: CounterMain.c ***********/
#include "Counter.h"
#include <stdio.h>
int main ()
{
int i;
for (i=0;i<5;++i)
{
++counter;
printf ("Users num: %d\n", getUsersNum());
}
return 0;
}
/******** END OF FILE: CounterMain.c ****/

令人惊讶的输出是:

Users num: 0
Users num: 0
Users num: 0
Users num: 0
Users num: 0

我不明白为什么使用静态变量时计数器没有增加。为什么他们会得到这样的输入?

谢谢大家!

最佳答案

在 C 语言中,静态变量的作用域是定义它的源文件。

由于您将此 header 加载到 2 个单独的 .c 文件中,因此每个文件都有一个唯一的变量。递增一个文件中的“计数器”不会影响另一个文件中的“静态”变量。

有关详细信息,请参阅 this description .为了使变量在多个文件中可见和共享,需要将其声明为extern。否则:

Static global variables: variables declared as static at the top level of a source file (outside any function definitions) are visible throughout that file ("file scope").

这里是这样的。

关于c - c中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com