我不知道在哪里搜索这个(可能是标准但仍然不知道要搜索什么),所以我会在这里问这个。
如果在某些执行array[i2]
中将设置为恰好等于 的array[i]
位置,那么这是定义的行为吗?i2
i
我正在使用C99(带有gcc 4.8.1),查看带有 的程序集gcc -S
,我没有看到任何可疑之处。
我不知道在哪里搜索这个(可能是标准但仍然不知道要搜索什么),所以我会在这里问这个。
如果在某些执行array[i2]
中将设置为恰好等于 的array[i]
位置,那么这是定义的行为吗?i2
i
我正在使用C99(带有gcc 4.8.1),查看带有 的程序集gcc -S
,我没有看到任何可疑之处。
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
}
这是绝对定义的行为。首先计算分配的右侧,然后分配到左侧。请注意,左侧必须解析为左值。
如果变量i
具有有效值,则赋值
i = i;
具有完美定义的行为。如前所述,这等同于您的问题。
如果您的情况有一些更棘手的问题,您必须提供有关它的更多详细信息。