【发布时间】:2021-04-19 07:50:55
【问题描述】:
我有以下简单的程序:
int main()
{
int x = 5;
static int y = x;
return (0);
}
使用 gcc 编译它,由于“初始化器元素不是常量”,它会为行 static int y = x; 产生错误。我认为这是因为y 是一个静态变量,其存储位置(数据/bss)和初始值需要在编译时知道。
但是,当使用 g++ 编译时,我没有收到任何错误并且程序运行良好(打印 y 打印 5)。
我的问题是:
- 我的假设正确吗?
- 如果是这样,为什么可以在 c++ 中对静态变量进行这样的初始化?
【问题讨论】:
-
对我来说工作正常:godbolt.org/z/qc3f9r
-
@ThePhilomath 这就是重点,它在 C++ 中有效,但在 C 中无效。
-
@Yksisarvinen:OP 提到了
gcc。我正在使用gcc。我错过了什么吗? -
是的,你对静态初始化是正确的,它发生在编译时。静态变量在编译时初始化,运行时放入代码的可执行部分
-
@ThePhilomath OP 提到了
gcc和g++。不幸的是,“GCC”是两者的通用名称,但gcc命令默认构建 C,g++构建 C++。还有更多的区别,但我从来没有真正深入研究过,所以我不能很好地解释它。
标签: c++ c build static-variables