Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Я могу ошибаться, но по-моему, отрицание любого указателя... 08.03.05 22:50 Число просмотров: 2306
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> Мне кажется, что и поэтому тоже, практика ( !ptr ) была б > чище. Меньше неопределённостей и зависимостей от измений и > дополнений в стандарты. Если только гарантритуется, что > отрицание любого ненулевого указателя результирует в целый > ноль (не знаю какой. скорее всего длинный L), то мы сразу > получаем в логическом выражении истину или ложь после > единственно возможного преобразования. Я могу ошибаться, но по-моему, отрицание любого указателя автоматически ведёт к его преобразованию в bool (даже в чистом C, по Стандарту 99 года) и после этого применению отрицания.
> Если же сравнивать с NULL, то вначале надо prt привети к > типу, например, void* (если NULL ((void*)0) ). > Если же #define NULL 0, то в проверке ptr == NULL указатель > должен быть приведён к целому типу (какому целому? 0 ничего > не говорит о типе, поскольку это литера). Ну здравствуйте, литеральный 0 — это signed int, по определению. При записи же (ptr == NULL) работает пункт стандарта, который постулирует, что любой указатель должен корректно проходить проверку на равенство с любым целым нулём. Я понимаю, что «корректно» — не слишком точное слово, но Стандарта под рукой сейчас нет.
|
|
|