if (_1_HOUR < count_value < _2_HOUR) {...}
此代码片段在 MPLAB X 中生成警告(它显然是使用 XC16 编译器编译的)。但我觉得它应该是一个错误。正确的代码(恕我直言)是:
if ((count_value >_1_HOUR) && (count_value < _2_HOUR)) {...}
我正在寻找涵盖这一点的 C 编程规则 - 有人知道那是什么吗?谢谢。
寻找涵盖这一点的 C 编程规则 - 有人知道那是什么吗?
既然你问了,在语法上涵盖这一点的 C 2018 规则是:
relational-expression
may be 。relational-expression < shift-expression
relational-expression
可能是.relational-expression < relational-expession < shift-expression
relational-expression
may be shift-expression
。所以我们可以把它代入上面两次得到.shift-expression < shift-expession < shift-expression
shift-expression
may be additive-expression
。additive-expression
可能是multiplicative-expression
。multiplicative-expression
may be cast-expression
。cast-expression
may be unary-expression
。unary-expression
may be postfix-expression
。postfix-expression
may be primary-expression
。primary-expression
may be identifier
or constant
.relational-expression
may be ,它可以是(或者,如果其中任何一个是扩展为常量或其他表达式的宏,则适用类似规则)。identifier < identifier < identifier
_1_HOUR < count_value < _2_HOUR
在语义上涵盖这一点的规则是:
<
都应具有实数类型(整数或浮点数)或两者都应是指针(有某些限制)。大概两者都有_1_HOUR
和countvalue
有整数或浮点类型,满足前者。int
。” 因此,当第二个的操作数<
是_1_HOUR < countvalue
and _2_HOUR
(也可能是整数或浮点数)时,它们也满足 6.5.8 3。我觉得这应该是一个错误
好吧,事实并非如此。该代码完全有效并且具有定义的行为。
if (_1_HOUR < count_value < _2_HOUR) {...}
如果1_HOUR < count_value
(which is 0
or 1
in 算术上下文)的结果小于_2_HOUR
then{...}
您的 X16 编译器可能支持这些可以帮助您的选项:
-Wall -Wextra -Werror -pedantic
我不确定它是否也支持-pedantic-errors
. 医生有点模糊。
`