变量零初始化 - 未定义的行为与否

时间:2012-08-28 17:05:58

标签: c++ c

  

可能重复:
  Is this self initialization valid?

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

int foo = foo;

int main()
{

}

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

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

int ThisIsZero;

int main(void)
{
    static int AndSoIsThis;
    int ButThisIsNotInitialized;
    ...
};

答案 3 :(得分:0)

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

相关问题