Почему следующий код является нарушением MISRA 20.2?
#define abs(a) (((a) < (0)) ? -(a) : (a))
Насколько я понимаю из тем, 20.2 не касается идентификатора препроцессора, тогда почему я получаю нарушение за то же самое.
Об этом также спрашивали на форуме MISRA , на котором был получен следующий "официальный" MISRA C ответ:
MISRA C
Правило 20.2 относится к объявлению непроцессорных имен. т.е. объекты, имена функций, typedefs. Этот код не является нарушением правила 20.2, но нарушает правило 20.1, которое не позволяет использовать стандартные библиотечные функции в # define.
Примечание: см. Профиль для отказа от ответственности
int abs(int n) - это стандартная библиотечная функция в C, поэтому вы не можете использовать имя 'abs' для своей собственной функции или макроса.
abs(int n)
abs