MISRA C:2012 Rule 11.9

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

Описание

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

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

Объяснение

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

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

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

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

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

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

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

Примеры

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

void main(void) {

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

#define MY_NULL_1 0    /* Non-compliant */
#define MY_NULL_2 ( void * ) 0  

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

}

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

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

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