以下程序提供1 1
而不是1 2
的输出,这是我使用static int count = 0
而非单独初始化count = 0
时的输出。
#include<stdio.h>
int fun()
{
static int count;
count = 0;
count++;
return count;
}
int main()
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}
这是否意味着单独的初始化会覆盖静态声明,而静态声明应该在调用之间保留值?
我搜索得非常广泛,但找不到明确证实我信仰的答案。
答案 0 :(得分:3)
count = 0;
是0到count
的显式赋值,它在每个时间内调用该函数。
因此你的输出。
写static int count;
初始化 count
为0,因为它具有静态存储持续时间。那是你想要的吗?
最后,fun
不是线程安全的,因为使用了非原子类型并且在没有互斥单元的情况下递增。
答案 1 :(得分:0)
#include<stdio.h>
int fun()
{
static int count;
count = 0; // for static variables this is not a initialisation
count++;
return count;
}
int main()
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}
count = 0
表示分配不是初始化
每次致电fun()
时,count
将由0
分配
如果您想使用this代码获得正确的输出
#include<stdio.h>
int fun()
{
static int count = 0;
count++;
return count;
}
int main()
{
printf("%d ", fun());
printf("%d ", fun());
return 0;
}