Данное диагностическое правило основано на руководстве 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).
Данная диагностика классифицируется как:
|