#include <stdio.h>
int foo(){
return 1;
}
int main(void) {
static int q = foo();
return 0;
}
Here is a link for the same.这是 C 代码而不是 C++。它在 C++ 中编译和运行良好,但在 C 中却不行。
此代码出现编译错误。有人可以解释为什么会出错吗?静态成员只能由常量值初始化吗?在 C++ 中,我们需要在声明静态成员后定义它们,为什么在 C 中不需要?我找不到任何具有类似查询或好的答案的线程。
最佳答案
全局变量和静态变量只能用编译时已知的常量表达式来初始化。调用您的 foo()
函数并不构成使用常量表达式。此外,未指定初始化全局变量和静态变量的顺序。通常,调用 foo()
意味着必须有一定的顺序,因为该函数可以合理地期望一些其他变量已经被初始化。
IOW,在 C 中,您的代码都不会在 main()
之前执行。
在 C++ 中有解决方法,但在 C 中没有。
关于c - 使用函数调用初始化静态变量会产生编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12720400/