вопрос байтоёбам |
[Nov. 25th, 2010|01:13 pm] |
скажите, вот нижеследующее всё ещё правда:
int *x = NULL; if (x == NULL) … /* good */ if (!x) … /* BAD! */
ну, то есть, когда-то в цэ говорилось, что NULL не обязан быть нулём. а щаз как? |
|
|
Comments: |
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | November 25th, 2010 - 04:32 pm |
---|
| | | (Link) |
|
благодарю, Кэп!
Просто NULL понимается как "совсем ноль". В нетипизированных языках это может быть пустой список или нулевой класс. То есть грубо говоря NULL - это нулевой указатель, или указатель, не указывающий ни на один типизированный (реальный) объект, имеющий значение своего типа.
А 0 - это просто 0, в принципе формально 0 - это реальное число, поэтому формально NULL != 0, т.к. 0 - это значение.
Может, несколько скомканно, но как-то так.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | November 25th, 2010 - 11:02 pm |
---|
| | | (Link) |
|
не, я к тому, что раньше в стандарте было чОтко сказано: NULL не обязательно «некое числовое значение со всеми битами, установлеными в 0». посему с точки зрения си оно вполне может быть и true, в силу полуторной логики. и, кстате, в компиляторе Zeta-C NULL риальне нулём не был. и проверка if (!x) — то ли не проходила, то ли для неё в трансляторе был сделан хак (лень сырцы читать, уж очень их там дохуя и архаика).
так вот мне интересно: это до сих пор так в стандарте? или я запамятовал, и в стандарте и раньше было написано особо, что транслятор обязан обеспечить работоспособность if (!x)?
просто текст стандартов большой, зараза, заебусь искать: вопрос-то чисто академический, мне насрать на дебильные системы, где NULL не равно нулю.
вот в цпп, вроде бы, чОтко сказано, что указатель «в никуда» — это 0, и нехуй всяким. впрочем, о том, что цпп с ц нихуя не совместим, всем давно известно. | |