LINUX.ORG.RU

> Есть ли системы, в которых NULL не (void*) 0, 0 и пр. вариации нуля?

Если 0 привести к указателю, то он всегда будет равен NULL. Это обязан гарантировать компилятор по стандарту.

Но этот NULL не обязан быть побитовым нулем. То есть например memcmp не гарантирует корректного сравнения NULL с нулем

dilmah ★★★★★
()

implementation-defined и точка, никаких предположений о том чему он равен ты делать не можешь. И вообще используй 0.

aton
()
Ответ на: комментарий от Legioner

Да. К сожалению не помню, где именно, но что-то мерещится будто на компах SGI в Irix. Но не уверен.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от Legioner

нет, не может.
ибо сказано:

An integer constant expression with the value 0, or
such an expression cast to type void *, is called a null
pointer constant.46) If a null pointer constant is assigned
to or compared for equality to a pointer, the constant is
converted to a pointer of that type.
Conversion of a null pointer to another pointer type
yields a null pointer of that type. Any two null pointers
shall compare equal.
The macro NULL is defined in <stddef.h> as a null pointer
constant;

Как я сказал выше, может провалиться вот это:
void *p = NULL;
char arr[sizeof(void *)];
memset(arr,0,sizeof(void *));
assert(!memcmp((char *)&p, arr, sizeof(void *));

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.