C编译器优化局部静态变量是否合法?

时间:2017-03-29 21:51:46

标签: c static local compiler-optimization

对于像

这样的功能
int test(void) {
  static int x = 0;
  x++;
  return 0;
}

是否允许C编译器优化x

作为参考,GCC 6.3.0或Clang 3.9都没有优化使用-O3递增x

1 个答案:

答案 0 :(得分:2)

编译器有权完全优化此函数,因为它没有可观察到的副作用(从C标准的角度来看)。

至于为什么你的编译器没有这样做,我无法解释! (当然,他们没有义务这样做。)