Ответ 1
В С++ вам нужно использовать NULL
, 0 или в некоторых новых компиляторах nullptr. Использование NULL
против 0 может быть немного дискуссией в некоторых кругах, но IMHO, NULL
является более популярным использованием более 0.
ОК, у меня есть код С++ в заголовке, который объявлен следующим образом:
void StreamOut(FxStream *stream,const FxChar *name = nil);
и я получаю: error:
'nil' was not declared in this scope
Нет, это паскаль, правильно?
Должен ли я использовать NULL?
Я думал, что они оба одинаковые или, по крайней мере, Zero, нет?
В С++ вам нужно использовать NULL
, 0 или в некоторых новых компиляторах nullptr. Использование NULL
против 0 может быть немного дискуссией в некоторых кругах, но IMHO, NULL
является более популярным использованием более 0.
nil
не существует в стандартном С++. Вместо этого используйте NULL
.
Да. Он NULL
в C
и C++
, а nil
- в Objective-C.
Каждый язык имеет свой собственный идентификатор без объекта. В C
стандартная библиотека NULL
является typedef ((void *)0)
. В C++
стандартная библиотека NULL
является typedef из 0
или 0L
.
Однако IMHO, вы никогда не должны использовать 0 вместо NULL
, так как он помогает читабельности кода, точно так же, как наличие постоянных переменных в вашем коде: без использования NULL значение 0 также используется для нулевых указателей в качестве значения базового индекса в циклах, а также для подсчета/размеров для пустых списков, становится труднее узнать, какой из них является. Кроме того, для grep
проще и т.д.
0 является рекомендуемым и распространенным стилем для С++
Если вы запустите поиск через glibc, вы найдете эту строку кода:
#define NULL 0
Это просто стандартный способ (не уверен, был ли он опубликован в любом месте) маркировки пустых указателей. Значение переменной 0 остается значением. Указатель, указывающий на 0 (0x0000... (его десятичный ноль)), фактически нигде не указывается. Это просто для удобства чтения.
int *var1, var2;
var1 = 0;
var2 = 0;
Вышеуказанные два назначения не совпадают, хотя оба они выглядят одинаково
просто добавьте в начале
#define null '\0'
или что угодно, а не null
и придерживайтесь того, что вы предпочитаете. Концепция null в С++ связана только с указателем, указывающим на ничего (0x0
)..
Учтите, что каждый компилятор может иметь собственное определение null, nil, NULL, что угодно.. но в конце он все равно 0.
Вероятно, в источнике, на который вы смотрите, есть
#define nil '\0'
где-то в файле заголовка.
Я видел несколько комментариев о том, почему не использовать 0. Как правило, людям не нравятся магические числа или номера со значением позади них. Дайте им имя. Я бы предпочел видеть ANSWER_TO_THE_ULTIMATE_QUESTION более 42 в коде.
Как и для nil, я знаю Obj-C, используя nil. Мне не хотелось бы думать, что кто-то пошел против очень популярного соглашения (или, по крайней мере, того, что я помню) из NULL, которое, как я думал, было где-то в стандартном библиотечном заголовке. Я еще не сделал С++, хотя.