crypt of decay - вопрос байтоёбам [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

вопрос байтоёбам [Nov. 25th, 2010|01:13 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
скажите, вот нижеследующее всё ещё правда:

int *x = NULL;
if (x == NULL) … /* good */
if (!x) … /* BAD! */

ну, то есть, когда-то в цэ говорилось, что NULL не обязан быть нулём. а щаз как?
Linkmeow!

Comments:
From:[info]smartly.mp
Date:November 25th, 2010 - 04:28 pm
(Link)
NULL всё ещё 0
[User Picture]
From:[info]ketmar
Date:November 25th, 2010 - 04:32 pm
(Link)
благодарю, Кэп!
[User Picture]
From:[info]gregory_777
Date:November 25th, 2010 - 10:55 pm
(Link)
Просто NULL понимается как "совсем ноль". В нетипизированных языках это может быть пустой список или нулевой класс. То есть грубо говоря NULL - это нулевой указатель, или указатель, не указывающий ни на один типизированный (реальный) объект, имеющий значение своего типа.

А 0 - это просто 0, в принципе формально 0 - это реальное число, поэтому формально NULL != 0, т.к. 0 - это значение.

Может, несколько скомканно, но как-то так.
[User Picture]
From:[info]ketmar
Date:November 25th, 2010 - 11:02 pm
(Link)
не, я к тому, что раньше в стандарте было чОтко сказано: NULL не обязательно «некое числовое значение со всеми битами, установлеными в 0». посему с точки зрения си оно вполне может быть и true, в силу полуторной логики. и, кстате, в компиляторе Zeta-C NULL риальне нулём не был. и проверка if (!x) — то ли не проходила, то ли для неё в трансляторе был сделан хак (лень сырцы читать, уж очень их там дохуя и архаика).

так вот мне интересно: это до сих пор так в стандарте? или я запамятовал, и в стандарте и раньше было написано особо, что транслятор обязан обеспечить работоспособность if (!x)?

просто текст стандартов большой, зараза, заебусь искать: вопрос-то чисто академический, мне насрать на дебильные системы, где NULL не равно нулю.

вот в цпп, вроде бы, чОтко сказано, что указатель «в никуда» — это 0, и нехуй всяким. впрочем, о том, что цпп с ц нихуя не совместим, всем давно известно.