Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для С. Ключевое слово 'static' не должно использоваться в контексте указания размера массива, принимаемого функцией, так как оно может быть проигнорировано. По сути, оно является лишь указанием компилятору, на основании которого он может сгенерировать более эффективный код.
Рассмотрим пример:
void add(int left[static 10], int right[static 10])
{
for(size_t i = 0U; i < 10U; ++i)
{
left[i] += right[i];
}
}
extern int data1[10];
extern int data2[20];
extern int data3[5];
void foo(void)
{
add(data1, data2);
add(data1, data3);
}
В коде несколько раз вызывается функция 'add', формальными параметрами которой являются два массива размером не менее 10 элементов. Второй вызов функции приведёт к неопределённому поведению, так как фактический размер массива (5) меньше ожидаемого (10).
Данная диагностика классифицируется как:
|