Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NULL или 0? 
V
    Опции темы
Hukuma
Дата 6.11.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 18.2.2009

Репутация: нет
Всего: нет




Здравствуйте! Я не писал на С, начал сразу учить С++. Встал вопрос о том, что правильнее - присваивать указателю NULL или 0, когда он больше не нужен. Я знаю, что в С++ рекомендуется использовать 0, но более опытные коллеги ратуют за NULL.  Отсюда вопрос - если сейчас привыкнуть 0, то не будет ли проблем при написании программ на компиляторе С? И есть ли такие компиляторы С++, которые считаю, что

Код

int *ptr=0


и 

Код

int *ptr=NULL


разные вещи?

PM MAIL   Вверх
Anikmar
Дата 6.11.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Надо писать NULL.
PM MAIL ICQ   Вверх
Hukuma
Дата 6.11.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



Anikmar, вы знаете из личного опыта? Я не прошу доказательств или убеждений, мне просто интересен вопрос переносимости кода, содержащего присваивание указателя на 0 на компилятор С.
PM MAIL   Вверх
azesmcar
Дата 6.11.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Hukuma

В C++ это тоже самое что и 0
Цитата(C++ standard)

The macro NULL is an implementation-defined C + + null pointer constant in this International Standard
(4.10).

Possible definitions include 0 and 0L, but not (void*)0.

а вот в C
Цитата(C99 standard)

In pointer comparisons, one of the operands may be of type void*. In particular, this allows
NULL, which can be defined as (void*)0, to be compared to any object pointer.

потому и
Цитата(Hukuma @  6.11.2009,  14:00 Найти цитируемый пост)
разные вещи?


Я лично предпочитаю называть вещи своими именами, NULL вместо 0, так нагляднее, представь вызов функции
Код

foo(object, 0, NULL);

и
Код

foo(object, 0, 0);

в первом случае сразу понятно что третий аргумент указатель.

Добавлено через 3 минуты и 40 секунд
Цитата(Hukuma @  6.11.2009,  14:06 Найти цитируемый пост)
мне просто интересен вопрос переносимости кода, содержащего присваивание указателя на 0 на компилятор С. 

я бы не стал так за это переживать, что значит переносимость в данном случае? Переносимость кода с C++ на C? Нафиг такое нужно? Это совершенно разные языки и никакой переносимости между ними нет и быть не может.
PM   Вверх
Hukuma
Дата 6.11.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



azesmcar, спасибо большое! Вы правы, первый пример намного нагляднее. Видимо лучше сразу приучусь к NULL smile

Добавлено через 9 минут и 37 секунд
azesmcar, я с вами согласен, что это неправильно переносить код с С++ на С, вопрос скорее более гипотетический, чем практический,
мои коллеги пишут так, а я иначе, хочется добиться единообразия в этом, но при том, чтобы было правильно smile
PM MAIL   Вверх
Любитель
Дата 6.11.2009, 23:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



В С++ - лучше пока 0 ИМХО. NULL - это макрос, ради которого (в отдельных случаях) ещё придётся и лишний инклюд ставить.. А style mix - это точно зло.

Вроде обещали в next-стандарте добавить ключевое слово nullptr. Не знаю, как там сейчас дела обстоят..


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 7.11.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Любитель @  6.11.2009,  23:47 Найти цитируемый пост)
В С++ - лучше пока 0 ИМХО. NULL - это макрос, ради которого (в отдельных случаях) ещё придётся и лишний инклюд ставить.. А style mix - это точно зло.

Вроде обещали в next-стандарте добавить ключевое слово nullptr. Не знаю, как там сейчас дела обстоят.. 

Каждый имеет право на свое лево. 0 - это int, а NULL - обозначение нулевого указателя. 
ИМХО в С++ я использую NULL - понятнее и логичнее. ИМХО
PM MAIL ICQ   Вверх
zkv
Дата 7.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Любитель, а как насчет null в новом стандарте (в контексте массового перевода программ в новый синтаксис), или как его будут обзывать, не суть? 

По теме. Называй как хочешь, часто описывается в стандарте твоей компании.
Для себя предпочитаю употреблять NULL, только для того, чтобы визуально легче было, в коде, отличать инициализацию указателя.
PM MAIL   Вверх
Любитель
Дата 7.11.2009, 01:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Anikmar @  7.11.2009,  00:07 Найти цитируемый пост)
Каждый имеет право на свое лево. 0 - это int, а NULL - обозначение нулевого указателя. 

Ээ.. это ваше мнение. 0 - это не int smile

Добавлено через 17 секунд
Цитата(zkv @  7.11.2009,  00:23 Найти цитируемый пост)
Любитель, а как насчет null в новом стандарте (в контексте массового перевода программ в новый синтаксис), или как его будут обзывать, не суть? 

Не понял вопроса.


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 7.11.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Любитель @  7.11.2009,  01:15 Найти цитируемый пост)
Ээ.. это ваше мнение. 0 - это не int 

Согласен, что 0 не совсем int, но давайте рассмотрим стандартные  преобразования. Когда 0 - это не int без принудительного преобраззования? 
PM MAIL ICQ   Вверх
andrew_121
Дата 7.11.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(Любитель @  6.11.2009,  23:47 Найти цитируемый пост)
Вроде обещали в next-стандарте добавить ключевое слово nullptr. Не знаю, как там сейчас дела обстоят.. 

Еще нет :(

Добавлено через 3 минуты и 42 секунды
ЛюбительAnikmar, По сути, мало кто вникает в детали NULL и 0. azesmcar Процитировал все что должен знать каждый С++ прогер.

Сам использую NULL для указателей, и 0 для целых.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Anikmar
Дата 7.11.2009, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(andrew_121 @  7.11.2009,  01:35 Найти цитируемый пост)
По сути, мало кто вникает в детали NULL и 0

Просветите меня в те детали, в которые я не вник, пожалуйста...
PM MAIL ICQ   Вверх
zkv
Дата 7.11.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Любитель, по контексту обсуждения похоже, ключевое слово называется 
Цитата(andrew_121 @  7.11.2009,  01:35 Найти цитируемый пост)
nullptr
.

Множество исходников на сегодняшний день написано как со словом NULL вместо нулевого указателя на, так и с 0 вместо него.
Первый понятно как перебить - достаточно замены макроопределения в проекте, а как быть со вторым? (в этом состоял мой вопрос)

PM MAIL   Вверх
Любитель
Дата 7.11.2009, 02:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Если честно - не знаю, надо читать. Но решения с первым - костыль. Причём (объективно) ужасный. Быть может будет работать и 0, но вот nullptr в контексте числа нельзя будет использовать. А быть может вообще на это предложение забили smile Просто я не слежу за С++ уже давно..

Добавлено через 2 минуты и 27 секунд
Цитата(Anikmar @  7.11.2009,  01:31 Найти цитируемый пост)
Когда 0 - это не int без принудительного преобраззования?  

Блин, когда используется в контексте любого указателя. Без explicit-кастинга. Конкретные линки на стандарт, думаю, не нужны? smile 

[полуоффтоп]
Кстати, кутешный кодестайл не рекомендует использовать NULL smile 
[/полуоффтоп]


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 7.11.2009, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Любитель @  7.11.2009,  02:08 Найти цитируемый пост)
Блин, когда используется в контексте любого указателя. Без explicit-кастинга. Конкретные линки на стандарт, думаю, не нужны?  

Если честно, уже сам сомневаюсь, но цифра 0 вроде всегда считалась int, а потом приводилась к типу void * .
Если 0 используется в контексте указателя разве там не идет преобразование int->void* ?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.