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

variable zero-initialization - undefined behaviour or not

本文关键字:未定义 是否 初始化 变量      更新时间:2023-10-16

可能重复:
这种自我初始化有效吗?

这是一个定义良好的C/C++程序吗?

int foo = foo;
int main()
{
}

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

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

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

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

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

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

这不会编译-问题的意义是什么?