Ниже приведен фрагмент кода на веб-сайте демонстрации P C -Lint с включенными проверками MISRA 2004
#include <stdint.h>
//enable some of MISRA 2004 Rules
//lint +e960
static uint8_t printf_(uint8_t a, void * b, ...);
static uint8_t printf_(uint8_t a, void * b, ...)
{
(void) a;
(void) b;
return 0U;
}
static const uint8_t (*func)(uint8_t a, void * b, ...) = printf_;
int main(void)
{
uint8_t data[8U] = {0};
(void) func(1U, &data[0], 2U);
return 0;
}
P C Lint сообщает, что У меня есть следующие нарушения правил MISRA 2004:
Примечание 960: Нарушение MISRA 2004 Обязательное правило 16.1, функция имеет переменное число аргументов: printf_
Примечание 960: Нарушение MISRA 2004 Обязательное правило 16.9, идентификатор функции используется без '&' или списка параметров в скобках: printf_
Как подавить только правило 16.1 MISRA 2004 для функции printf_
?
До сих пор пробовал следующие решения, ни одно из приведенных ниже не работает для меня:
-esym(960, 16.1)
подавляет правило 16.1 MISRA для всех других символов -estring(960, "printf_")
подавляет все другие правила MISRA для символа printf_
например, правило 16.9 -estring(960, "function has variable number of arguments: 'printf_'")
в соответствии с руководством, предположим, что оно работает, но я не могу этого сделать -estring(960, "function has variable number of arguments:", "printf_")
некоторые экспериментальные подсказки со следующего сайта блог Матиаса Крааза также не работа
Лучшее, что я получил на данный момент:
- , помещая
printf_
в блок -esym(960, 16.1) ... +esym(960, 16.1)
, однако это повышает уровень предупреждений MISRA 2004 до уровня ошибки и останавливает компиляцию, если произойдет другое нарушение.
Я с нетерпением жду ваших идей.