MISRA 20.2违反误解

时间:2018-04-26 14:20:18

标签: c misra

为什么以下代码违反了MISRA 20.2?

#define abs(a)   (((a) < (0)) ? -(a) : (a))

据我从主题中了解,20.2与预处理程序标识符无关,那么为什么我会因此而受到违规。

2 个答案:

答案 0 :(得分:2)

int abs(int n)是C中的标准库函数,因此不允许您使用名称&#39; abs&#39;为你自己的功能或宏。

答案 1 :(得分:1)

MISRA Forum也提出了这个问题,该问题引起了以下人员的注意:#34; MISRA C回答:

  

规则20.2指的是非预处理程序名称的声明。即对象,函数名,typedef。此代码不违反规则20.2,但违反了规则20.1,该规则不允许在#define中使用标准库函数。

注意:请参阅免责声明的个人资料