exponenta event banner

MISRA C:2012 Правило 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 спецификатор хранилища.

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

Группа: Объявления и определения
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2014b