对华为c语言编程规范的疑问

[复制链接]
1516|7
 楼主| wwzx2513 发表于 2019-7-24 21:52 | 显示全部楼层 |阅读模式
建议10.3中说:除了逗号(,),逻辑与(&&),逻辑或(||)之外,C标准没有规定同级操作符是从左还是从右开始计算,f4 = f1 + f2 + f3;
以上表达式存在种计算次序:f4 = (f1 + f2) + f3 或f4 = f1 + (f2 + f3),浮点数计算过程中可能四舍五入,量级提升,计算次序的不同会导致f4的结果不同,以上表达式在不同编译器上的计算结果可能不一样,建议增加括号明确计算顺序
C语言不是规定加减乘除都是从左到右的吗?
R2D2 发表于 2019-7-24 22:15 | 显示全部楼层
同级运算符左右顺序不定是对的,曾经蛋疼编译过一个试题类似(++i)+i+(--i)这样测试左右顺序的,用mingw、intel c++、vc++编译出来运算结果都不一样。

但是我认为华为规范是错的,仅仅是因为左右相加顺序不同就出现了不可忍耐的误差,只能说明你的类型选错了,应该使用更精确的数据类型。

评论

我认为华为目的是让不同的人写的程序,做相同的操作都有尽量一致的结果吧。  发表于 2019-7-25 14:48
dirtwillfly 发表于 2019-7-24 22:40 | 显示全部楼层
turbo c是从右向左,也有编译器是从左向右的
叶春勇 发表于 2019-7-25 14:56 | 显示全部楼层
特别复杂的算式,我是喜欢用括号,因为优先级,自己搞不清楚了。
tianxj01 发表于 2019-7-25 15:03 | 显示全部楼层
这规范我理解没问题,这样看起来有点画蛇添足的感觉,不过至少可以保证在不同环境下面保证获得肯定的结果。
 楼主| wwzx2513 发表于 2019-7-26 08:50 | 显示全部楼层
dirtwillfly 发表于 2019-7-24 22:40
turbo c是从右向左,也有编译器是从左向右的

我看结合性的说明上没有说和编译器有关
 楼主| wwzx2513 发表于 2019-7-26 08:51 | 显示全部楼层
叶春勇 发表于 2019-7-25 14:56
特别复杂的算式,我是喜欢用括号,因为优先级,自己搞不清楚了。

这个不复杂,是同级同样的运算符,C语言规定了优选级和结合性,怎么看华为的规则里C语言好像没有结合性一说
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

239

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部