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