打印

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

[复制链接]
1337|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++编译出来运算结果都不一样。

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

使用特权

评论回复
评论
coody 2019-7-25 14:48 回复TA
我认为华为目的是让不同的人写的程序,做相同的操作都有尽量一致的结果吧。 
板凳
dirtwillfly| | 2019-7-24 22:40 | 只看该作者
turbo c是从右向左,也有编译器是从左向右的

使用特权

评论回复
地板
叶春勇| | 2019-7-25 14:56 | 只看该作者
特别复杂的算式,我是喜欢用括号,因为优先级,自己搞不清楚了。

使用特权

评论回复
5
tianxj01| | 2019-7-25 15:03 | 只看该作者
这规范我理解没问题,这样看起来有点画蛇添足的感觉,不过至少可以保证在不同环境下面保证获得肯定的结果。

使用特权

评论回复
6
wwzx2513|  楼主 | 2019-7-26 08:50 | 只看该作者
dirtwillfly 发表于 2019-7-24 22:40
turbo c是从右向左,也有编译器是从左向右的

我看结合性的说明上没有说和编译器有关

使用特权

评论回复
7
wwzx2513|  楼主 | 2019-7-26 08:51 | 只看该作者
叶春勇 发表于 2019-7-25 14:56
特别复杂的算式,我是喜欢用括号,因为优先级,自己搞不清楚了。

这个不复杂,是同级同样的运算符,C语言规定了优选级和结合性,怎么看华为的规则里C语言好像没有结合性一说

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

239

帖子

1

粉丝