这个自我初始化是否有效?

我有这个问题,我早些时候想过,但认为这不是微不足道的回答

int x = x + 1; int main() { return x; } 

我的问题是,如果程序的行为是有效的,是定义的还是未定义的。 如果定义了,主要是已知的x的值?

我很确定它已经被定义了,x的值应该是1.§3.6.2/ 1说:“静态存储持续时间(3.7.1)的对象在进行任何其他初始化之前应该被初始化(8.5)。 “

之后,我觉得这很简单。

我的问题是,如果程序的行为是有效的,是定义的还是未定义的。 如果定义了,主要是已知的x的值?

这段代码绝对不干净,但对我来说,它应该可以预见。

int x将variables放入程序启动时定义为零的数据段中。 在main()之前,调用静态初始化器。 对于x即代码x = x + 1x = 0 + 1 = 1 。 因此main()会返回1。

如果x是一个局部variables,那么代码肯定会以不可预知的方式工作。 与数据段不同,栈的状态几乎保证包含未定义的垃圾。

存储在.bss中的“x”variables,当您加载程序时,该variables填充0。 因此,程序在内存中加载时,“x”的值为0。

然后在调用main之前,执行“x = x + 1”。

我不知道它是否有效,但行为不是未定义的。

在主调用x必须初始化为0之前,因此它的值必须是1,你inputmain,你将返回1.这是一个定义的行为。