1

我不知道在哪里搜索这个(可能是标准但仍然不知道要搜索什么),所以我会在这里问这个。

如果在某些执行array[i2]中将设置为恰好等于 的array[i]位置,那么这是定义的行为吗?i2i

我正在使用C99(带有gcc 4.8.1),查看带有 的程序集gcc -S,我没有看到任何可疑之处。

4

3 回答 3

1
foo() {
  int i, j, a[5], b[5];
  i = i; // undefined because reading i is UB
  j = i; // undefined because reading i is UB
  a[i] = a[i]; // undefined because reading i is UB
  a[3] = a[3]; // undefined because reading a[3] is UB
  b[3] = a[3]; // undefined because reading a[3] is UB
}
于 2013-11-07T19:28:37.317 回答
1

这是绝对定义的行为。首先计算分配的右侧,然后分配到左侧。请注意,左侧必须解析为左值。

于 2013-11-07T19:19:32.073 回答
0

如果变量i具有有效值,则赋值

i = i;

具有完美定义的行为。如前所述,这等同于您的问题。

如果您的情况有一些更棘手的问题,您必须提供有关它的更多详细信息。

于 2013-11-07T19:27:32.687 回答