MISRA C:2012 Rule 17.6

Объявление параметра массива не должно содержать статическое ключевое слово между []

Описание

Управляйте определением

Объявление параметра массива не должно содержать статическое ключевое слово между [].

Объяснение

Если вы используете static ключевое слово в [] для параметра массива функции можно сообщить компилятору C99, что массив содержит минимальное число элементов. Компилятор может использовать эту информацию, чтобы сгенерировать эффективный код для определенных процессоров. Однако в вашем вызове функции, если вы обеспечиваете меньше, чем заданный минимальный номер, поведение не задано.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

extern int arr1[20];
extern int arr2[10];


unsigned int total (unsigned int n,
                    unsigned int arr[static 20]) { // Non-compliant
 
    unsigned int i;
    unsigned int sum = 0;

    for (i=0U; i < n; i++) {
        sum+= arr[i];
    }

    return sum;
}

void func (void) {
    int res, res2;
    res = total (10U, arr1); //Undefined behavior 
    res2 = total (20U, arr2); 
}

В этом примере правило нарушено когда static ключевое слово используется в [] в параметре массива функционального total. Даже если вы вызываете total с аргументами Array, где поведение четко определено, происходит нарушение правила.

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

Группа: Функция
Категория: обязательный
Категория AGC: обязательный
Введенный в R2014b