Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
ПОКА ЧТО в большинстве случаев работает и то и другое 11.03.05 12:05 Число просмотров: 2426
Автор: amirul <Serge> Статус: The Elderman
|
> ИМХО, выбирать надо то, что работает в большинстве случаев. > Без разницы какое значение имеет NULL по стандарту. Это > важно только для компилятора и кодера, но абсолютно не > важно для готовой программы, так как и 0x00000000 и > 0xffffffff (если бы последнее значение было принято > стандартом для NULL) лежат в адресном пространстве проца > (для 32-х битной модели памяти).
В стандарте не указано битовое представление для NULL. Сказано лишь, что это литеральный 0, преобразованный к указательному типу. Для программы гораздо важнее, что NULL вообще не стандартизирован и в будущем вообще возможно станет deprecated
> Кодер не должен помнить, как определяется тот или иной тип > или константа и всего-навсего должен писать синтаксически > правильный код, а все остальное на совести производителя > компилятора. > Таким образом, синтаксически правильным, на мой взгляд > является if (ptr == NULL), а не if (!ptr), потому что в
Гы, СИНТАКСИЧЕСКИ правильным является даже (ptr += NULL). Ошибка здесь только в семантике. С другой стороны ОБА вышеприведенных варианта верны и синтаксически и семантически
> последнем случае мы имеем неявное преобразование > значения указателя к булевому типу и в > этом случае уж точно никто не сможет гарантировать > одинаковое вышеупомянутое преобразование во всевозможных > Си-подобных компиляторах.
Как раз стандарт ГАРАНТИРУЕТ преобразование NULL-pointer-а к FALSE, но довольно мало говорит о NULL. Для C++ это проблема просто потому, что нельзя сравнивать указатели с разными типами, поэтому (ptr == NULL) в случае с C++ более хрупкий вариант
|
|
|