请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377S 工具/软件:TI C/C++编译器
您好 TI
我最近想用这种方式为32位无符号长整型值分配一些位、并看到优化器的一种奇怪的行为。
此代码被减少以显示我的意思:
volatile char myGlobalVolatileCharisOne = 1; unsigned long myFunction (void) { unsigned long result = 0UL; myGlobalVolatileCharisOne = 1; result|=(myGlobalVolatileCharisOne? 1UL:0UL)<<1); 结果|=(myGlobalVolatileCharisOne? 1UL:0UL)<<16); 返回结果; }
我确实希望结果= 0x00010002。
使用-Ooff 时、我得到的结果= 0x00010002
使用-O3时、我得到的结果= 0x00000002
它似乎与左移相关。 如果我用这种方式编写表达式、则会按预期工作:
Result |=(myGlobalVolatileCharisOne? 0x00010000UL:0UL);
这种方法也是可以的:
Result |=(myGlobalVolatileCharisOne? (1UL<<16): 0UL);
CGT 16.9.8和 CGT 18.1.3
此致
Roger