提问者:小点点

MISRA 5-2-1规则需要后缀表达式吗?


MISRA-2008规则5-2-1规定

逻辑&的每个操作数都应该是后缀表达式。 异常:如果表达式由只包含逻辑&的序列或只包含逻辑的序列组成,则不需要额外的括号。

下面是文档本身的示例:

if (x == 0 && ishigh)      // Non-compliant
if (( x == 0 ) && ishigh)  // Compliant
if (x || y || z)           // Compliant by exception, if x, y and z bool
if (x || y && z)           // Non-compliant
if (x || (y && z))         // Compliant
if (x && !y)               // Non-compliant
if (x && (!y))             // Compliant
if (is_odd(y) && x)        // Compliant
if ((x > c1) && (y > c2)  && (z > c3))   // Compliant - exception
if ((x > c1) && (y > c2)  || (z > c3))   // Non-compliant
if ((x > c1) && ((y > c2) || (z > c3)))  // Compliant as extra() used

有人能告诉我后缀表达式在哪里吗? 它们看起来是初级的。 我没有看到类似++--的内容。


共1个答案

匿名用户

所有主表达式都是后缀表达式。 在这些示例中,唯一不是主表达式的后缀表达式是is_odd(y)

后缀表达式的语法是:

后缀-表达式:

主表达式
后缀-表达式[表达式或带括号的初始化列表]
后缀-表达式(表达式-列表选择)
简单类型说明符(表达式-列表选择)
类型名称说明符(表达式-列表选择)
简单类型说明符带括号的初始化列表
后缀-表达式模板选择ID-表达式
后缀- /code>类型ID>(表达式)
TypeID(表达式)
TypeID(类型ID)

主表达式:

文字

(表达式)
ID-表达式
lambda-表达式
fold-表达式
required-表达式