将int自己的地址分配给其值

Yuv*_*val 27 c c++

以下代码是未定义的行为,实现是由标准定义还是定义的?我找不到任何关于将整数分配给自己的地址的参考.

volatile int x = (int)&x;
Run Code Online (Sandbox Code Playgroud)

此代码转换为:

lea         eax,[ebp-4]  
mov         dword ptr [ebp-4],eax 
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 21

在C中,x在声明和初始化中使用都很好:

(C99,6.2.1p7)"[......]任何其他标识符的范围都在其声明者完成之后开始."

指针转换为整数的结果是实现定义的,可以是未定义的行为:

(C99,6.3.2.3p7)"任何指针类型都可以转换为整数类型.除了先前指定的,结果是实现定义的.如果结果不能用整数类型表示,则行为是未定义的.结果不必在任何整数类型的值范围内."


mas*_*oud 12

在C++中,根据声明规则.它定义明确.因为之前=,变量x被声明然后&x是已知的.这是一个棘手的问题,下面的代码是未定义的行为:

int x = x;        // undefined behavior, using uninitialized variable
Run Code Online (Sandbox Code Playgroud)

但...

int x = (int)&x;  // defined behavior
Run Code Online (Sandbox Code Playgroud)

我在谈论C++,但我相信它对C也有效.