【发布时间】:2011-12-26 19:53:47
【问题描述】:
根据PC-lint,以下语句永远不会是TRUE:
if((variable & 0x02) == 1)
我正在使用用于嵌入式系统的 C 编译器,只要设置了 variable 中的相应位,就会将其评估为 TRUE。我猜编译器正在对== 的两侧进行TRUE/FALSE 比较,而不是比较结果数字。换句话说,每当表达式(varable & 0x02) 不为零(即TRUE)时,语句也将为TRUE,因为值1 is also TRUE(不为零)。
我不知道C/C++ 标准是否明确定义了编译器在这种情况下的行为方式。是否有任何C/C++ 专家可以根据标准(例如C90, C99, 等)的内容回答这个问题?
P.S.:在上面的语句中,“变量”是一个无符号字符。
【问题讨论】:
-
能否请您命名这个编译器?我的一个朋友收集了一些奇怪的编译器错误。
-
你的真实代码是否有可能有一个双&符号(例如“var && 0x02”)?这可以解释编译器将其评估为真的。
-
@tinman 猜得好,这会将错误从编译器转移到程序代码:)
标签: c++ c if-statement conditional-statements