Определить null как строчную версию NULL? Переполнение стека

Быстрый вопрос здесь, я не большой поклонник печатания НОЛЬ всегда в верхний регистр и я хотел знать, смогу ли я определить нижний регистр версия.

Когда я пытаюсь определить его в заголовочном файле как:

#define null NULL;

это позволяет скомпилировать эту строку, но если я попытаюсь позвонить ноль где-нибудь в моем коде я получаю синтаксическую ошибку.

Например, если я напишу:

if(root == null){ /* Code here */}

Eclipse говорит мне, что это синтаксическая ошибка, и если я пытаюсь построить свой проект, я получаю эту ошибку:

нулевая ошибка

Является НОЛЬ особый случай, когда мне не разрешат это сделать или я что-то делаю неправильно?

2

Решение

Если вы используете компилятор C ++ 11, используйте nullptr и не беспокойтесь о #define,

Если вы должны использовать #define, удалить ; с линии.

#define null NULL
10

Другие решения

Точка с запятой в конце строки неверна. Право

#define null NULL
5

Как уже говорилось в других ответах, вашей ошибкой было написать #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) имеет точно такой же эффект.

[1] Из действующего стандартного рабочего проекта (N4296 / 2014-11-19):

18.2 Типы
[…] 3) Макрос NULL является константой нулевого указателя C ++, определенной реализацией, в этом международном стандарте (4.10) .194

а также

4.10 Преобразование указателя
1) Константа нулевого указателя является целочисленным литералом (2.13.2) со значением ноль или значением типа std :: nullptr_t
,

4

Почему бы не использовать вместо nullptr? Это строчные а также типобезопасный!

2
По вопросам рекламы [email protected]