Правило 11.9 MISRA C:2012

Макро-NULL должен быть единственной разрешенной формой целочисленного постоянного нулевого указателя

Описание

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

Макро-NULL должен быть единственной разрешенной формой целочисленного постоянного нулевого указателя.

Объяснение

Следующие выражения требуют использования постоянного нулевого указателя:

  • Присвоение на указатель

  • Операция == или !=, где один операнд является указателем

  • Операция ?:, где один из операндов по обе стороны от: указатель

Используя NULL, а не 0 проясняет, что был предназначен постоянный нулевой указатель.

Обменивайтесь сообщениями в отчете

Макро-NULL должен быть единственной разрешенной формой целочисленного постоянного нулевого указателя.

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

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

Примеры

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

void main(void) {

    int *p1 = 0;              /* Non-compliant */ 
    int *p2 = ( void * ) 0;   /* Compliant     */ 

#define MY_NULL_1 0  
#define MY_NULL_2 ( void * ) 0  

    if ( p1 == MY_NULL_1 )    /* Non-compliant */
    { }
    if ( p2 == MY_NULL_2 )    /* Compliant     */
    { }

}

В этом примере нарушено правило, когда постоянный 0 используется вместо (void*) 0 для присвоений указателя и сравнений.

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

Группа: преобразования типа указателя
Категория: необходимый
Категория AGC: удобочитаемость
Язык: C90, C99

Введенный в R2014b