c - 使用函数调用初始化静态变量会产生编译错误?

标签 c static

#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/

相关文章:

python - 即使扩展了模板,为什么还要为每个模板加载静态文件?

c - *ip 的值打印为其指向的变量的地址

c - 为函数分配参数

java - 在 Spring 中为静态常量注入(inject)值

PHP 与 ASP.NET 静态变量

c - 为什么普通 header 中的内联 void foo() { ... } 可以正常工作?

java - LWJGL 键盘循环

c - 如何通过kill命令从子进程向父进程发送信号

c - 如何将基于列表的文件复制到同样基于列表创建的相应文件夹中?

对于更大的应用程序,我可以只使用一个 header 吗?