Вопрос: Если "NULL" и "0" эквивалентны, то какую форму из двух использовать?

Ответ:
Многие программисты верят, что "NULL" должен использоваться во всех выражениях, содержащих указатели как напоминание о том, что значение должно рассматриваться как указатель.
Другие же чувствуют, что путаница, окружающая "NULL" и "0", только усугубляется, если "0" спрятать в операторе #define и предпочитают использовать "0" вместо "NULL".

Единственного ответа не существует. Программисты на С должны понимать, что "NULL" и "0" взаимозаменяемы и что "0" без преобразования типа можно без сомнения использовать при инициализации, присваивании и сравнении.

Любое использование "NULL" (в противоположность "0" ) должно рассматриваться как ненавязчивое напоминание, что используется указатель; программистам не нужно ничего делать (как для своего собственного понимания, так и для компилятора) для того, чтобы отличать нулевые указатели от целого числа 0.

NULL нельзя использовать, когда необходим другой тип нуля. Даже если это и будет работать, с точки зрения стиля программирования это плохо.
(ANSI позволяет определить NULL с помощью
  #define как (void *)0
Такое определение не позволит использовать NULL там, где не подразумеваются указатели).

Особенно не рекомендуется использовать NULL там, где требуется нулевой код ASCII (NUL). Если необходимо, напишите собственное определение
  #define NUL '\0'


Смотри: K&R II Разд. 5.4 c. 102.
Автор: Кодт    Оценить