Re: NULL и функции с неуказанным количеством аргументов
От: Кодт Россия  
Дата: 02.10.07 08:05
Оценка:
Здравствуйте, Slimp, Вы писали:

S>Все было бы замечательно, если бы не появились 64 разрядные системы, в которых (void *)0 и 0 имеют различную длинну.

S>В функциях типа execl, в качестве поcледнего указателя должен быть 0. Соответственно не 0, не NULL там писать нельзя.
S>В принципе, даже в манах рекомендуют (char *)0 — такая конструкция всегда работает нормально, но мне не нравится

Больше того, та же фигня должна наблюдаться на 16-битных системах с huge моделью памяти (32-битными указателями).

S>Я понимаю, что можно NULL задефайнить самостоятельно так, как тебе нравится,


Можно даже задефайнить #define true false, но делать это не следует.

S> но вопрос собственно в другом.

S>С какой тайной целью NULL так определили ? Почему он в С++ равен 0, а в С ((void *)0) ?

Потому что литерал 0 в С++ значит "что угодно, нулевое по сути". В частности, это любой нулевой типизированный указатель на объект, функцию или член.
void foo(int* x);

int main()
{
    foo( (void*)0 ); // ошибка: приведение void* к int*
}

Конечно, было бы корректнее ввести именованные константы null (а то и null, nullfun, nullmember, nullmemberfun), чтобы не смешивать числа и указатели.
Но вот не сделали. Пожалели лишнее ключевое слово.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.