MISRA C:2012 Rule 8.10

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

Описание

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

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

Объяснение

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

Если вы хотите сделать подставляемую функцию доступной для нескольких модулей перевода, можно все еще задать ее с 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: необходимый
Введенный в R2014b