Правило 8.10 MISRA C:2012

Подставляемая функция должна быть объявлена со статическим классом памяти

Описание

Управляйте определением

Подставляемая функция должна быть объявлена со статическим классом памяти.

Объяснение

Если вы вызываете подставляемую функцию, которая объявлена с внешней связью, но не задана в том же модуле перевода, функциональная сила не встраиваются. Вы не можете видеть сокращение во время выполнения, которое вы ожидаете от встраивания.

Если вы хотите сделать подставляемую функцию доступной для нескольких модулей перевода, можно все еще задать ее со спецификатором static. В этом случае поместите определение в заголовочный файл. Включайте заголовочный файл во все файлы, где вы хотите встроенную функцию.

Реализация Polyspace

Средство проверки правила отмечает определения, которые содержат спецификатор inline без сопроводительного спецификатора static.

Обменивайтесь сообщениями в отчете

Подставляемая функция должна быть объявлена со статическим классом памяти.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

inline double mult(int val);
inline double mult(int val) {   /* Non compliant */
    return val * 2.0;
}

static inline double div(int val);
static inline double div(int val) {  /* Compliant */
    return val / 2.0;
}

В этом примере определение mult несовместимо, потому что это встраивается без спецификатора устройства хранения данных static.

Проверяйте информацию

Группа: объявления и определения
Категория: необходимый
Категория AGC: необходимый
Язык: C99

Введенный в R2014b