不应使用 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",即使是那些也应该稀疏地使用。
我正在努力避免违反规则 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",即使是那些也应该稀疏地使用。