【发布时间】:2021-05-23 18:17:41
【问题描述】:
undefined behavior (UB) 的一个明显例子是,在读取一个值时:
int a;
printf("%d\n", a);
下面的例子呢?
int i = i; // `i` is not initialized when we are reading it by assigning it to itself.
int x; x = x; // Is this the same as above?
int y; int z = y;
以上三个例子都是UB,还是有例外?
【问题讨论】:
-
这三个都有未定义的行为。
-
@Dan 您在评论中链接的副本中的链接,说它在语法上是合法的,但行为是未定义的。
-
从未初始化的变量中读取是未定义的行为。就在那时。
-
int i = i;在语义上等同于int i; i = i;两者都是 UB。但仅仅因为你的代码中有 UB 并不意味着编译器必须对此做些什么,它是整个未定义位的一部分。一个体面的编译器将能够检测到它并警告您,但从编译器的角度来看,这不是错误。 -
这不是因为编译器或处理器可能会或可能不会做什么,而是因为 C 标准这么说虽然我找不到相关的条款。
标签: c