这个小码是UB吗?
void Test()
{
int bar;
printf("%p", &bar);
}
IMO 这不是 UB,但我想要一些其他意见。
它只是打印地址bar
, 即使bar
从未被初始化过。
TL:DR不,您的代码不会通过使用任何东西来调用 UB未初始化的,正如您可能想到的那样。
(ny) 变量的地址(在本例中是自动的)有一个definedvalue,所以无论变量本身是否初始化,变量的地址都是一个定义值。您可以利用该值。 (如果您不处理指针并进行双重取消引用。 :) )
也就是说,严格来说,你应该写
printf("%p", (void *)&bar);
as %p
需要一个指针类型的参数void
and printf()
作为一个可变函数,没有提升(转换)执行。否则,这是一个明确定义的行为。
C11
,第 §7.21.6.1 章
p
参数应该是一个指向void
。 [......]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)