Быстрый вопрос здесь, я не большой поклонник печатания НОЛЬ всегда в верхний регистр и я хотел знать, смогу ли я определить нижний регистр версия.
Когда я пытаюсь определить его в заголовочном файле как:
#define null NULL;
это позволяет скомпилировать эту строку, но если я попытаюсь позвонить ноль где-нибудь в моем коде я получаю синтаксическую ошибку.
Например, если я напишу:
if(root == null){ /* Code here */}
Eclipse говорит мне, что это синтаксическая ошибка, и если я пытаюсь построить свой проект, я получаю эту ошибку:
Является НОЛЬ особый случай, когда мне не разрешат это сделать или я что-то делаю неправильно?
Если вы используете компилятор C ++ 11, используйте nullptr
и не беспокойтесь о #define
,
Если вы должны использовать #define
, удалить ;
с линии.
#define null NULL
Точка с запятой в конце строки неверна. Право
#define null NULL
Как уже говорилось в других ответах, вашей ошибкой было написать #define null NULL;
вместо #define null NULL
, И если вы хотите определить null
на самом деле вы должны определить, что это nullptr
, Просто угадай, что foo(NULL);
вызовем, если эти функции доступны:
void foo(int* param);
void foo(int param);
Ответ зависит от реализации[1], потому что NULL
может быть 0
или же nullptr
так что это на самом деле непереносимой код.
Я также хотел добавить, что в вашем примере вообще нет необходимости проверять NULL, так как if (root)
имеет точно такой же эффект.
18.2 Типы
[…] 3) Макрос NULL является константой нулевого указателя C ++, определенной реализацией, в этом международном стандарте (4.10) .194
а также
4.10 Преобразование указателя
1) Константа нулевого указателя является целочисленным литералом (2.13.2) со значением ноль или значением типа std :: nullptr_t
,
Почему бы не использовать вместо nullptr
? Это строчные а также типобезопасный!