【发布时间】:2018-01-02 08:29:03
【问题描述】:
我正在尝试从我的代码中消除违反规则 15.5 的行为。
示例代码:
#define RETURN_VAL(num) {return (2 * num);}
static int32_t
func(int32_t n1, int32_t n2, int32_t n3)
{
if (n1 == 1) {
RETURN_VAL(1);
}
if (n2 == 2) {
RETURN_VAL(2);
}
if (n3 == 3) {
RETURN_VAL(3);
}
return 0;
}
由于MACRO(有返回值)在多个地方使用,导致违反规则15.5。
有没有办法将这种保留作为 MACRO 本身来解决。
【问题讨论】:
-
相应地更改它,使其变为
return MACRO(num);没有办法让你的蛋糕也吃掉。保留宏本身也是不明智的。但这是另一回事。 -
请注意,使用隐藏控制流的宏被认为是一种不好的做法。你真的应该重写代码来删除它。
-
原始宏的意义何在?除了让代码的读者感到困惑之外?
-
如果您正在开发需要 MISRA 的代码,那么 sn-p 无论如何都不应该通过审查(至少我不会让它通过)。您正在隐藏代码流。您的宏没有声明它将修改返回值。您有多个返回(即使删除宏并将它们放在代码中仍然违反 MISRA)。