Вопрос: Если "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.