В стандартных инклудах NULL определен как:
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
Все было бы замечательно, если бы не появились 64 разрядные системы, в которых (void *)0 и 0 имеют различную длинну.
В функциях типа
execl, в качестве поcледнего указателя должен быть 0. Соответственно не 0, не NULL там писать нельзя.
В принципе, даже в манах рекомендуют (char *)0 — такая конструкция всегда работает нормально, но мне не нравится
Я понимаю, что можно NULL задефайнить самостоятельно так, как тебе нравится, но вопрос собственно в другом.
С какой тайной целью NULL так определили ? Почему он в С++ равен 0, а в С ((void *)0) ?