Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Функции с квалификатором 'inline' должны быть объявлены с квалификатором 'static'.
Если inline-функция объявлена в некоторой единице трансляции и имеет 'external linkage', но не определена в этой единице трансляции, то это приведет к неопределенному поведению.
Проблема может возникнуть, даже если 'inline'-функция, имеющая 'external linkage', объявлена и вызывается в одной единице трансляции. Такой вызов является неуточненным поведением. Компилятор может как сгенерировать вызов функции, так и встроить тело этой функции на место вызова. Несмотря на то, что это не повлияет на поведение вызванной функции, это может повлиять на время выполнения программы, и, как следствие, повлиять на программу во время ее исполнения.
Пример кода, на который анализатор выдаст предупреждение:
#include <stdint.h>
extern inline int64_t sum(int64_t lhs, int64_t rhs);
extern inline int64_t sum(int64_t lhs, int64_t rhs)
{
return lhs + rhs;
};
Данная диагностика классифицируется как:
|