Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
Функция, объявленная однажды с 'internal linkage', при повторном объявлении или определении будет также иметь 'internal linkage'. Это может быть неочевидно для разработчика, и поэтому следует явно указывать спецификатор 'static' в каждом объявлении и определении.
Следующий код не соответствует правилу, так как определение не отражает тип связывания, заданный в объявлении функции 'foo'.
static void foo(int x);
void foo(int x)
{
....
}
Код в соответствии с правилом должен быть следующим:
static void foo(int x);
static void foo(int x)
{
....
}
В примере, приведенном ниже, определение функции 'foo' со спецификатором класса хранения 'extern' не задает 'external linkage', как могло показаться. Тип связывания остается 'internal linkage':
static void foo(int x);
extern void foo(int x)
{
....
}
Правильный вариант:
extern void foo(int x);
extern void foo(int x)
{
....
}
Данная диагностика классифицируется как:
|