不应使用 MISRA C 2012 规则 20.5 #undef

MISRA C 2012 Rule 20.5 #undef should not be used

我正在努力避免违反规则 20.5

示例代码:

#define VAL 2
int32_t func(void)
 {
    int32_t n1 = VAL;
    #undef VAL
    #define VAL(x) (x*x)
    return VAL(n1);
 }

这里是否可以在不更改任何其他行的情况下解决 undef 问题?

不,没有解决方法。代码写得不好,没有理由像这样使用预处理器。这只是混淆 - 摆脱它。请改用普通变量。

几乎没有理由使用 #undef 的情况。我能想到的唯一有效案例是 "X macros",即使是那些也应该稀疏地使用。