ADS编译器遇到的怪事
非常简单的语句,其中checksum uint8的<br /><br />这样写没的问题,<br /> checksum = ~checksum;<br /> if(checksum != buf) <br /> return 0;<br /><br /><br />改成这样每次都执行到return 0; <br /> if(~checksum != buf) <br /> return 0;<br /><br />呵呵
说明第一种写法是安全写法。<br /><br />长运算表达式的中间结果有时会发生类型改变。这编译器不会那么傻嘛,checksum的类型是明确的
不懂
应该是流水线冲突吧
<br /><br />究竟是不是我就不知道了(要看反汇编),大概是的,理由如下:<br /><br /> ~checksum != buf <br /><br />arm、dsp等高速器件采用多级流水线结构<br /><br />~chedksum的值还没有算出即开始比较了,这样当然不行了<br /> <br />同意楼上一半:要看反汇编
但不应该是流水线冲突。这个C编译器肯定要解决的。if((~checksum) != buf[13]) return 0;
不放心的就()~~~~~~~~~~~~~哈哈,不放心的就()~~~~~~~~~~~~~
我现在()才放心。<br />懒得记优先级。<br />(a*b)+c,嘻嘻,够变态吧。。。挺玄
挺玄ADS编译器本身就有问题.
十六进制数中不能出现E,因为编译器把E当成指数.楼上说的不是真的吧
有这回事,那变量岂不是不能用e?
严格的说,是不能E+....
例如<br />int test(void)<br />{<br /> int a=10;<br /> int b;<br /> b=0x1E+a; // 出错,因为编译器把"E+"当成指数.<br /> return b;<br />}<br /><br /><br />跳过的写法是:<br /><br />int test(void)<br />{<br /> int a=10;<br /> int b;<br /> b=0x1D+1+a; // 正确<br /> return b;<br />}<br />
页:
[1]