Jab*_*cky 3 c printf variadic-functions undefined-behavior
这个小代码是UB吗?
void Test()
{
int bar;
printf("%p", &bar);
}
Run Code Online (Sandbox Code Playgroud)
IMO不是UB,但我想要其他一些意见.
bar即使bar从未初始化,它也只是打印地址.
TL:DR不,你的代码不会像你想象的那样使用任何未初始化的东西来调用UB .
(ny)变量的地址(在这种情况下是自动的)具有定义的值,因此无论变量本身是否被初始化,变量的地址都是定义的值.您可以使用该值.(如果你没有处理指针并进行双重引用.:))
那说严格来说,你应该写
printf("%p", (void *)&bar);
Run Code Online (Sandbox Code Playgroud)
如果%p期望类型指针的参数void和printf()作为可变参数函数,则不执行促销(转换).否则,这是一个明确定义的行为.
C11,章节§7.21.6.1
p参数应该是指针void.[......]