NULL и 0
От: Exception Беларусь  
Дата: 27.04.03 12:20
Оценка:
Чем отличаеться сабж ?
... << RSDN@Home 1.0 beta 6a >>
Re: NULL и 0
От: Кодт Россия  
Дата: 27.04.03 13:54
Оценка: 10 (1)
Здравствуйте, Exception, Вы писали:

E>Чем отличаеться сабж ?


Язык Си в вопросах и ответах
Вопросы 1.1, 1.3 и далее.

Там исчерпывающе.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re: NULL и 0
От: Андрей Тарасевич Беларусь  
Дата: 27.04.03 14:04
Оценка: 5 (1) -2
Здравствуйте, Exception, Вы писали:

E>Чем отличаеться сабж ?


С какой точки зрения "отличаются"? Пишутся по-разному, как ты сам, наверное, сам заметил. 'NULL'- четыре символа, а '0' — только один. 'NULL' — макрос, а '0' — целочисленный литерал. В С++ за макросом 'NULL' может скрываться как литеральный ноль, так и некое целочисленное константное выражение, со значением ноль. При этом допустимым значением выражения 'NULL' в С++ является не только '0', но и '0L'. А в С за 'NULL' может скрываться также и выражение типа "указатель".

Тем не менее, при работе с указателями '0' и 'NULL' взаимозаменяемы.
Best regards,
Андрей Тарасевич
Re: NULL и 0
От: Павел Кузнецов  
Дата: 27.04.03 14:41
Оценка: 43 (5) +1
Здравствуйте, Exception, Вы писали:

E>Чем отличаеться сабж ?


К тому, что уже сказано, можно добавить также то, что при использованни NULL часть компиляторов может диагностировать некоторые экзотические ошибки. Например:

#include <cstddef>

void f(int, ...);

int main()
{
  f(1, 4, NULL);
}


Передача NULL (или 0 в значении null pointer constant) без явного приведения к соответствующему типу указателя в функцию с переменным количеством параметров в общем случае является ошибкой, т.к. представление указателей различных типов может различаться и представление нулевого указателя (null pointer value) соответствующего типа далеко не обязательно совпадает с представлением значения 0 целочисленного типа. Если приведенный выше вызов функции написать так:

  f(1, 4, 0);


у компилятора не будет даже теоретической возможности "узнать", что предполагалась передача указателя. Если же нулевой указатель обозначен через NULL, то некоторая реализация вполне может использовать "магию" для диагностики подобных случаев. Например, по крайней мере, одна из версий GCC пользовалась этой возможностью, используя в определении NULL специальное "магическое" значение (__null__ или что-то подобное).
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.