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 с аргументами массив, где поведение четко задано, происходит нарушение правила.

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

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