我不知道在哪里搜索这个(可能是标准但仍然不知道要搜索什么),所以我会在这里问这个。
如果某些执行array[i2]
将设置为array[i]
i2
恰好等于i
,那么这是定义的行为吗?
我正在使用 C99 (使用 gcc 4.8.1 ),使用gcc -S
查看程序集,我看不到任何可疑的东西。
答案 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;
具有完美定义的行为。如上所述,这相当于您的问题。
如果您的情况有些棘手,您必须提供更多详细信息。