#include <stdio.h>
int foo(){
return 1;
}
int main(void) {
static int q = foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是相同的链接.这是一个C代码而不是C++.它编译并在C++中运行良好,但不是C.
此代码出现编译错误.有人可以解释为什么会出错?静态成员只能用常量值初始化吗?在C++中,我们需要在声明静态成员后对其进行DEFINE,为什么在C中不需要它?我找不到任何具有类似查询或良好答案的线程.
全局变量和静态变量只能使用编译时已知的常量表达式进行初始化.调用foo()函数不构成使用常量表达式.此外,未指定全局变量和静态变量的初始化顺序.通常,调用foo()意味着必须有一定的顺序,因为函数可以合理地期望其他一些变量已经初始化.
IOW,在C中,您的代码之前都没有执行过main().
在C++中有很多方法,但不是在C语言中.
所有静态变量都是编译时,函数在运行时提供输出,因此您正在使用运行时变量初始化编译时变量,而这是不可能的,因此会产生错误。
另一个示例可能如下
int main()
{
int p=9;
static int x=p;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码也给你编译时错误,原因与上面相同。
| 归档时间: |
|
| 查看次数: |
5833 次 |
| 最近记录: |