C语言未定义行为问题
b=a+a+(++a);这样的表达式竟然也是未定义的!?它在linuxgcc编译运行结果是a+a然后a自增再加a,有点不理解按道理应该是先自增然后相加??不是吗!麻烦解释...
b=a+a+(++a);
这样的表达式竟然也是未定义的!? 它在linux gcc 编译运行结果 是a+a 然后 a 自增再加a , 有点不理解 按道理 应该是 先自增然后相加??不是吗! 麻烦解释一下 展开
这样的表达式竟然也是未定义的!? 它在linux gcc 编译运行结果 是a+a 然后 a 自增再加a , 有点不理解 按道理 应该是 先自增然后相加??不是吗! 麻烦解释一下 展开
7个回答
展开全部
加减运算顺序是自左向右的!
所以是先进行a+a, 然后 a 自增再加a
所以是先进行a+a, 然后 a 自增再加a
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般这种情况不同编译器可能有不同的实现,对于a的运算排序是不确定的
对于编程风格来说,这种风格是不对,一般编程中可以认为是“Bad Code”, 严重点说可以认为是错误的
对于编程风格来说,这种风格是不对,一般编程中可以认为是“Bad Code”, 严重点说可以认为是错误的
追问
你好!感谢你的回答,请问如何培养正确的编程风格,是否有关介绍的资料?
追答
高质量 C++/C 编程指南
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
纯语法分析:
++a自增运算是在“++a”中的a被使用之前自增,而“+”运算是从左往右的,先计算a+a,然后在加(++a)
++a自增运算是在“++a”中的a被使用之前自增,而“+”运算是从左往右的,先计算a+a,然后在加(++a)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数参数值的计算次序, 语言规范并没有规定, 由编译器自己定义.
比如
int i = 5;
fun(i, ++i); // 第一个参数被传递的是5还是6, 由编译器决定.
就如1楼的仁兄所言, 这种代码是不应该被写出来的. 分开来写, 不会多打几个字母.
比如
int i = 5;
fun(i, ++i); // 第一个参数被传递的是5还是6, 由编译器决定.
就如1楼的仁兄所言, 这种代码是不应该被写出来的. 分开来写, 不会多打几个字母.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询