该语句a[i]=i++;
未定义,因为存在混淆使用i
(旧或新)的哪个值来评估左侧以获得L-value
. 如果使用-Wall
.
在下面的代码中,语句x->a = x->b, ++x++->b;
x
被更改,在左侧它用于获取L-value
. 对于这个语句,如果用 . 执行,编译器不会给出任何警告-Wall
。
有人可以解释为什么这不是未定义的行为吗?谢谢!
struct Data {
int a;
int b;
} y[4] = { 10, 20, 30, 40};
struct Data *x = y;
int i;
for(i=0; i<2; i++) {
x->a = x->b, ++x++->b;
printf("%d %d\t", y[i].a, y[i].b);
}