ИМХО, выбирать надо то, что работает в большинстве случаев. [updated]10.03.05 21:57 Число просмотров: 2475 Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 10.03.05 22:24 Количество правок: 2
> > > А никто и не собирался сравнивать с указателем > ;-P. > > > Выбирался более правильный из двух вариантов > > > (!ptr) и (ptr == NULL) > > Если > NULL — это > > (void *)0, то ptr> ==
> > NULL — это как раз
> > сравнение с указателем :) > > Если б стандартом было #define NULL ((void*)0), то проверка > (ptr == NULL) была бы наглядной и логичной.
ИМХО, выбирать надо то, что работает в большинстве случаев.
Без разницы какое значение имеет NULL по стандарту. Это важно только для компилятора и кодера, но абсолютно не важно для готовой программы, так как и 0x00000000 и 0xffffffff (если бы последнее значение было принято стандартом для NULL) лежат в адресном пространстве проца (для 32-х битной модели памяти).
Кодер не должен помнить, как определяется тот или иной тип или константа и всего-навсего должен писать синтаксически правильный код, а все остальное на совести производителя компилятора.
Таким образом, синтаксически правильным, на мой взгляд является if (ptr == NULL), а не if (!ptr), потому что в последнем случае мы имеем неявное преобразование значения указателя к булевому типу и в этом случае уж точно никто не сможет гарантировать одинаковое вышеупомянутое преобразование во всевозможных Си-подобных компиляторах.