在下面的代码中,在声明x-> a = x-> b,x – > b;
x正在改变,在左侧,它用于获得L值.对于此语句,如果使用-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);}解决方法 逗号运算符的优先级最低,
Expression:
assignment-Expression
Expression,
assignment-Expression
所以
x->a = x->b,++x++->b;
实际上是
(x->a = x->b),++(x++->b);
并且逗号运算符是一个序列点,因此对x的两个修改是有序的,并且没有未定义的行为.
总结以上是内存溢出为你收集整理的为什么提到的代码是C中未定义的行为全部内容,希望文章能够帮你解决为什么提到的代码是C中未定义的行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)