Russian Qt Forum
Апрель 30, 2024, 16:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: NULL vs 0  (Прочитано 17134 раз)
Hort
Гость
« : Июль 16, 2008, 02:27 »

Что правильнее: использовать 0 или NULL в С++?
« Последнее редактирование: Июль 16, 2008, 13:25 от pastor » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 16, 2008, 11:14 »

Кажись правильнее в С++ 0.
« Последнее редактирование: Июль 16, 2008, 13:24 от pastor » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dodge
Гость
« Ответ #2 : Июль 16, 2008, 11:17 »

Правельнее использовать макрос NULL
« Последнее редактирование: Июль 16, 2008, 13:25 от pastor » Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #3 : Июль 16, 2008, 11:28 »

В C++ не рекомендуется использовать макросы.
Записан
Dodge
Гость
« Ответ #4 : Июль 16, 2008, 11:54 »

В C++ не рекомендуется использовать макросы.
Ну имеется ввиду наверно пользовательские макросы... как же быть без __LINE__, __FILE__, __PRETTY__FUNCTION__ ? Смеющийся

З.Ы. Это рекомендация из нового стандарта?
Записан
ритт
Гость
« Ответ #5 : Июль 16, 2008, 11:59 »

__LINE__, __FILE__, ... - это макросы компилятора (не по теме)
в плюсах общераспространено использование костант...хотя, и макросы никто не запрещал.
лично я использую константы, т.к. в этом есть некоторое преимущество над макросами
Записан
Dodge
Гость
« Ответ #6 : Июль 16, 2008, 12:24 »

__LINE__, __FILE__, ... - это макросы компилятора (не по теме)
ну если уж давится подробностями ( Смеющийся), то это макросы препроцессора... дело не в этом.
Разговор идет об использовании макроса NULL, который по сути является внутренним макросом и как я понимаю существующим на уровне стандарта.

Собственно вопрос был про рекомендация, он и остался.
« Последнее редактирование: Июль 16, 2008, 13:26 от pastor » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Июль 16, 2008, 13:03 »

Правельнее использовать макрос NULL, но троли почемуто повсемесно используют именно 0, по этому сложно сказать что правельнее в приложения с исп. qt...

Стандарт С++ глосит следующее:

Цитировать
18.1. 4 The macro NULL is an implementation-defined C++ null pointer constant in this International Standard. Possible definitions include 0 and 0L, but not (void*)0.

т.е. согласно стандарту NULL == 0. Но NULL в зависимости от реализации не обязан быть именно 0. Это зависит от фантазии разработчиков компилятора. Лично мне не известно ни одной реализации, где NULL был бы отличен от 0, но это не означает, что таких реализаций не может быть вообще. Поэтому программистам С++ рекомендуют использовать 0 вместо NULL.

Страуструп жестко относится к использованию макроса NULL в программах:

Цитировать
5.1.1. Ноль.
...
В языке С было очень популярно определять макрос NULL для представления такого нулевого указателя. Так как в C++ типы проверяются более жестко, использование банального нуля вместо NULL приведет к меньшим проблемам. Если вы чувствуете, что просто обязаны определить NULL, воспользуйтесь
const int NULL = 0;
« Последнее редактирование: Июль 16, 2008, 13:26 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #8 : Июль 16, 2008, 13:21 »

во, хочу добавить ещё про нулл Улыбающийся
все ведь читали на башорге про
> #define TRUE false
> #define FALSE true // счастливого дебага
?

нулл был изначально задуман чтобы стать популярным и потом делать такие пакости Улыбающийся
Записан
Red Devil
Гость
« Ответ #9 : Июль 16, 2008, 15:57 »

Использовать "0", кроме всего лучше еще по 2 причинам :
1) Его очень просто написать (нужно нажать всего лишь одну кнопку), т.е. помощь программисту который пишет код
2) Он читается проще и быстрее, помощь программисту читаюшему код.

Мне этот макрос всегда не нравился, но приучили на учебе, но после того как прочитал Страуструпа окончательно отказался от него.
Записан
Tonal
Гость
« Ответ #10 : Июль 16, 2008, 21:04 »

В новом стандарте вводят константу null_ptr которая не будет приводится к интегральным типам.
Т.е. конструкции подобные null_ptr != 2 или buf[null_ptr] будут приводить к ошибкам компиляции в отличии от 0 != 2 или buff[NULL]
Записан
Red Devil
Гость
« Ответ #11 : Июль 16, 2008, 22:02 »

Вообще-то массив нулевой длины и в текущем стандарте нельзя определить и все компиляторы маломальски поддерживающие стандарт генерируют ошибку времени компиляции на int a[0] или int a[NULL].
Записан
Tonal
Гость
« Ответ #12 : Июль 17, 2008, 06:53 »

Я имел в виду не объявление а выражение:
Код:
char buf[10];
buf[NULL] = 5;
Страуструп возражал против макроса ввиду его полной бессмысленности. Т.к. его невозможно определить так, чтобы компилятор отлавливал подобные ошибки.
« Последнее редактирование: Июль 17, 2008, 06:57 от Tonal » Записан
Red Devil
Гость
« Ответ #13 : Июль 17, 2008, 10:59 »

О_о
я сомневаюсь чтобы кто-нибудь такое мог написать ... профессионал точно не напишет, для новичка это покажется слишком не логичным.
Записан
Dodge
Гость
« Ответ #14 : Июль 17, 2008, 11:16 »

во, хочу добавить ещё про нулл Улыбающийся
все ведь читали на башорге про
> #define TRUE false
> #define FALSE true // счастливого дебага
?

нулл был изначально задуман чтобы стать популярным и потом делать такие пакости Улыбающийся
Всемирный заговор?  Улыбающийся

Цитировать
18.1. 4 The macro NULL is an implementation-defined C++ null pointer constant in this International Standard. Possible definitions include 0 and 0L, but not (void*)0.
Собственно это я и хотел ... прочесть  Смеющийся спасибо.
« Последнее редактирование: Июль 18, 2008, 12:08 от pastor » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.