Как Вы имеете дело с NUL?

Хорошо, я понял это. Я пошел в File >> New >> Project, выбрал «ASP.Net Core Web Application», затем в следующем окне мне пришлось изменить «ASP.NET Core 2.2» на «ASP.NET Core 2.1», тогда шаблоны были .

enter image description here

Showing Template

6
задан raven 21 October 2008 в 12:47
поделиться

15 ответов

Я использую '\0' для nul-символа и NULL для указателей, потому что это является самым ясным в обоих случаях.

BTW, оба 0 и '\0' ints в C и любом будет преобразован в char при хранении в a char переменная.

10
ответ дан 8 December 2019 в 02:36
поделиться
const char END_OF_STRING = '\0';

Таким образом, когда Вы говорите:

str[i] = END_OF_STRING;

или

if (*ptr == END_OF_STRING)

нет абсолютно никакого вопроса, что Вы имеете в виду.

0
ответ дан 8 December 2019 в 02:36
поделиться

Мы используем ПУСТОЙ УКАЗАТЕЛЬ для указателей и NULLCHAR для символов, с помощью

#define NULLCHAR '\0'
0
ответ дан 8 December 2019 в 02:36
поделиться

Системы, которые не используют двоичный 0 для ПУСТОГО УКАЗАТЕЛЯ, становятся более твердыми найти. Они также имеют тенденцию иметь различные проблемы мобильности. Почему? Поскольку в этих системах ни memset, ни calloc не могут убрать структуру, которая содержит указатели правильно.

0
ответ дан 8 December 2019 в 02:36
поделиться

Для коммуникации я использую ПУСТОЙ УКАЗАТЕЛЬ. Если я работаю с разработчиком, который не может схватить понятие ПУСТОГО УКАЗАТЕЛЯ для различных типов данных затем, я был бы заинтересован.

Для реализации это является определенным для случая. Числа 0 (снабдил постфиксом f для с плавающей точкой), указатели являются Пустыми, и символьные строки 0.

0
ответ дан 8 December 2019 в 02:36
поделиться

Мне вполне нравится

#define ASCII_NUL ('\0')

Я только достаточно редко ввожу с опечаткой '\0' как '0'. Но когда я сделал это, я нашел, что ошибка очень трудно определяет инспекцией кода с веселыми последствиями. Таким образом, я не люблю '\0' очень и предпочитаю ASCII_NUL или 0 (конечно, у последнего есть неправильный тип в C++). Очевидно, я использую '\0', где потребовано непротиворечивостью с существующим кодом или руководствами по стилю.

Google руководство по стилю C++, которое содержит несколько вещей, которые я люблю и некоторые, я не делаю, но кажется главным образом звуковым, предпочитает ПУСТОЙ УКАЗАТЕЛЬ 0 для указателей. Это указывает, что ПУСТОЙ УКАЗАТЕЛЬ не мог бы быть определен просто как 0 (или 0L), особенно в реализациях, где sizeof (пусто*) не мог бы быть sizeof (интервал) (или sizeof (длинное целое)).

0 и ПУСТОЙ УКАЗАТЕЛЬ и указаны, чтобы иметь целочисленный тип, и при преобразовании в тип указателя они оба должны привести к значению нулевого указателя. Но они обязательно не имеют того же целочисленного типа. Таким образом, Вы могли бы очевидно получить некоторые полезные предупреждения или ошибки в некоторых ситуациях при помощи ПУСТОГО УКАЗАТЕЛЯ.

1
ответ дан 8 December 2019 в 02:36
поделиться

В то время как в целом я был бы совет с помощью названный константами, это - одно исключение. Мне, определяя:

#define NULL 0
#define END_OF_STRING '\0'

имеет столько же смысла сколько определение:

#define SEVEN 7

который не является ни одним. И да, я знаю, что ПУСТОЙ УКАЗАТЕЛЬ уже определяется компилятором, но я никогда не использую его. Для указателей, 0; для символов, '\0'. Дольше не всегда означает более выразительный.

1
ответ дан 8 December 2019 в 02:36
поделиться
A one-L NUL, it ends a string. 
A two-L NULL points to no thing. 
And I will bet a golden bull 
That there is no three-L NULLL. 



(The name of the original author is, alas, lost to the sands of time.)
3
ответ дан 8 December 2019 в 02:36
поделиться

Существует много английских слов по буквам, которые произносят или говорят одинаково, все же которые имеют различные значения. Как на английском языке, используйте контекст, в котором обсуждение происходит для руководства Вас к подразумеваемому смыслу.

4
ответ дан 8 December 2019 в 02:36
поделиться

@BKB:

Я вижу точку в его совете, но "ПУСТОЙ УКАЗАТЕЛЬ" делает это более ясным, что контекст является указателями. Это похоже на использование "0.0" для значений с плавающей точкой, как '\0' при контакте с символами. (Аналогично, я предпочитаю видеть 0, если символ используется в арифметическом контексте.)

У Bjarne дальнейшие состояния в этом FAQ, что ПУСТОЙ УКАЗАТЕЛЬ является #defined как 0 так или иначе, столь стандартный код, не должно быть проблемы с ним. Я соглашаюсь, что нотация всех заглавных букв ужасна, но мы должны будем ожидать до 0x (где nullptr будет доступен как ключевое слово.)

3
ответ дан 8 December 2019 в 02:36
поделиться
  • Для контакта со строками я alwayse представляют нулевой символ как '\0'.
  • Для указателей я пытаюсь использовать implicit-conversion-to-boolean (если (! myPtr) или если (myPtr)) для ничтожности указателя.
  • Если мне нужно значение по умолчанию для указателя, это является ПУСТЫМ, например, структура list_head = {0.0, ПУСТОЙ УКАЗАТЕЛЬ} ;).

END_OF_STRING глуп, так как это - дополнительная косвенность, которая просто смущает новых читателей (любой, кто сразу не распознает '\0', должен ступить далеко от клавиатуры).

Еще одна вещь — я думаю, что различие между нулевым значением и пустым значением чрезвычайно важно при разговоре о моделировании данных. Это особенно верно при обсуждении строк C-стиля или nullable полей базы данных. Существует огромная разница между кем-то говорящим Вам, "У меня нет имени" и "Меня зовут".

4
ответ дан 8 December 2019 в 02:36
поделиться

ПУСТОЙ УКАЗАТЕЛЬ для баз данных, NIL для кода.

1
ответ дан 8 December 2019 в 02:36
поделиться

Если я помню правильно, что большинство компиляторов C определяет ПУСТОЙ УКАЗАТЕЛЬ как это:

#define NULL ((void*)0)

Это должно гарантировать, что ПУСТОЙ УКАЗАТЕЛЬ интерпретируется как являющийся типом указателя (в C). Однако это может вызвать проблемы в намного большем количестве типа строгий мир C++. Например:

// Example taken from wikibooks.org
std::string * str = NULL; // Can't automatically cast void * to std::string *
void (C::*pmf) () = &C::func;
if (pmf == NULL) {} // Can't automatically cast from void * to pointer to member function.

Поэтому в текущем стандарте C++ нулевые указатели должны быть инициализированы с литеральным 0. Очевидно, потому что люди так привыкли к использованию ПУСТОГО УКАЗАТЕЛЯ, определяют, я думаю много компиляторов C++ или тихо игнорирую проблему или переопределяю ПУСТОЙ УКАЗАТЕЛЬ, чтобы быть 0 в коде C++. Например:

#ifdef __cplusplus
#define NULL (0)
#else
#define NULL ((void*)0)
#endif

C++ x0 стандарт теперь определяет a nullptr ключевое слово для представления нулевых указателей. Компилятор CLI/C++ 2005 Visual C++ также использует это ключевое слово при установке управляемых указателей в NULL. В текущих компиляторах можно создать шаблон для эмуляции этого нового ключевого слова.

Существует намного более подробная статья о wikibooks.org, обсуждающем этот вопрос.

3
ответ дан 8 December 2019 в 02:36
поделиться

Мне нравится предопределенный ПУСТОЙ макрос, поскольку он сохраняет семантическое значение, а не некоторое другое использование номера 0.

5
ответ дан 8 December 2019 в 02:36
поделиться

Вроде как: Slashdot недавно опубликовал статью о comp.lang.c разделе часто задаваемых вопросов о нулевых указателях , которую я нашел довольно интересным.

0
ответ дан 8 December 2019 в 02:36
поделиться