CIs*_*ies 3 c initialization undefined-behavior
在阅读本文时,我看到了一个我不了解的UB,希望您能澄清一下
size_t f(int x)
{
size_t a;
if(x) // either x nonzero or UB
a = 42;
return a;
}
Run Code Online (Sandbox Code Playgroud)
我猜UB是由于a没有初始化的值,但这不是它定义的行为吗?意思是,无论f(0)变量a是什么, 都将返回其所保存的值(我认为这类似于rand())。我们是否必须知道代码片段返回的值使代码具有明确定义的行为?
意思是f(0)将返回变量a所保存的值,无论它是什么...
好吧,就您而言
a 是自动局部变量因此,是的,根据定义,这会导致未定义的行为。
引用C11第6.3.2.1章
[...]如果左值指定了可以使用寄存器存储类声明的自动存储持续时间的对象(从未获取其地址),并且该对象未初始化(未使用初始化器声明并且对其没有赋值,已在使用之前执行),则行为未定义。