静态声明后使用赋值语句

时间:2017-07-17 08:16:25

标签: c

以下程序提供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;
}

这是否意味着单独的初始化会覆盖静态声明,而静态声明应该在调用之间保留值?

我搜索得非常广泛,但找不到明确证实我信仰的答案。

2 个答案:

答案 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;
}