C++ 3d.Комментарии

7b6e9298

Ноль


Если вы чувствуете, что просто обязаны определить NULL, воспользуйтесь const int NULL=0;

Суть данного совета в том, что согласно определению языка не существует контекста, в котором (определенное в заголовочном файле) значение NULL было бы корректным, в то время как просто 0 -- нет.

Исходя из того же определения, передача NULL в функции с переменным количеством параметров вместо корректного выражения вида static_cast<SomeType*>(0) запрещена.

Безусловно, все это правильно, но на практике NULL в функции с переменным количеством параметров все же передают. Например, так: #include <stdio.h> #include <stdarg.h> #include <stdlib.h>

void error(int stat ...) { va_list ap; va_start(ap, stat);

while (const char* sarg=va_arg(ap, const char *)) printf("%s", sarg);

va_end(ap); exit(stat); }

int main() { error(1, "Случилось ", "страшное", NULL); // внимание, ошибка! // вместо NULL нужно использовать // static_cast<const char *>(0) }

Именно для поддержки подобного рода практики (некорректной, но широко распространенной) реализациям разрешено определять NULL как 0L (а не просто 0) на архитектурах, где sizeof(void*)==sizeof(long)>sizeof(int).



Содержание раздела