【发布时间】:2014-11-24 12:29:20
【问题描述】:
如果出现错误,下面的 sn-p 是否会调用未定义的行为?
#include <stdio.h>
int main() {
int i; /* Indeterminate */
if (scanf("%d", &i) == 1) /* Initialize */
printf("%d\n", i); /* Success! Print read value */
else
printf("%d\n", i); /* Input failed! Is printing `i` UB or not? */
return 0;
}
如果scanf失败了,是不是访问了一个未初始化的变量?
编辑
此外,如果我将scanf("%d", &i) 替换为my_initializer(&i) 会怎样:
int my_initializer(int *pi)
{
double room_temp_degc = get_room_temp_in_degc();
if(room_temp_degc < 12.0) {
// Cool
*pi = 42;
return 1;
} else {
return 0;
}
}
【问题讨论】:
标签: c undefined-behavior c11