Как подавить одиночное правило MISRA 2004 для символа в пите P C - PullRequest
1 голос
/ 25 марта 2020

Ниже приведен фрагмент кода на веб-сайте демонстрации 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 до уровня ошибки и останавливает компиляцию, если произойдет другое нарушение.

Я с нетерпением жду ваших идей.

...