设定值等于自身

时间:2013-11-07 19:17:05

标签: c gcc standards c99 undefined-behavior

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

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

我正在使用 C99 (使用 gcc 4.8.1 ),使用gcc -S查看程序集,我看不到任何可疑的东西。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

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

i = i;

具有完美定义的行为。如上所述,这相当于您的问题。

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