2

可能重复:
这个自初始化是否有效?

这是一个定义明确的 C/C++ 程序吗?

int foo = foo;

int main()
{

}

foo被零初始化,还是未定义的行为?

4

4 回答 4

11

这是一个格式错误的 C 程序。在 C 中,具有静态存储持续时间的对象的初始化程序必须是常量表达式。foo右侧的 不是常量表达式。

在 C++ 中,由于对象的零初始化具有静态存储持续时间(这发生在任何其他初始化之前),因此它是格式良好的并且具有定义的行为。

于 2012-08-28T17:09:44.293 回答
1

它甚至不能在 C 中编译。除了使用编译时常量之外,您不能初始化全局变量。

于 2012-08-28T17:07:13.067 回答
1

静态/全局变量初始化为 0。因此:

int ThisIsZero;

int main(void)
{
    static int AndSoIsThis;
    int ButThisIsNotInitialized;
    ...
};
于 2012-08-28T17:08:25.170 回答
0

那不编译 - 问题的重点是什么?

于 2012-08-28T17:11:29.203 回答