Russian Qt Forum
Ноябрь 23, 2024, 12:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
NULL vs 0
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: NULL vs 0 (Прочитано 17923 раз)
Hort
Гость
NULL vs 0
«
:
Июль 16, 2008, 02:27 »
Что правильнее: использовать 0 или NULL в С++?
«
Последнее редактирование: Июль 16, 2008, 13:25 от pastor
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: как отсоединить модель от представления
«
Ответ #1 :
Июль 16, 2008, 11:14 »
Кажись правильнее в С++ 0.
«
Последнее редактирование: Июль 16, 2008, 13:24 от pastor
»
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dodge
Гость
Re: как отсоединить модель от представления
«
Ответ #2 :
Июль 16, 2008, 11:17 »
Правельнее использовать макрос NULL
«
Последнее редактирование: Июль 16, 2008, 13:25 от pastor
»
Записан
Sergey B.
Программист
Offline
Сообщений: 544
Re: как отсоединить модель от представления
«
Ответ #3 :
Июль 16, 2008, 11:28 »
В C++ не рекомендуется использовать макросы.
Записан
Dodge
Гость
Re: как отсоединить модель от представления
«
Ответ #4 :
Июль 16, 2008, 11:54 »
Цитата: Sergey B. от Июль 16, 2008, 11:28
В C++ не рекомендуется использовать макросы.
Ну имеется ввиду наверно пользовательские макросы... как же быть без __LINE__, __FILE__, __PRETTY__FUNCTION__ ?
З.Ы. Это рекомендация из нового стандарта?
Записан
ритт
Гость
Re: как отсоединить модель от представления
«
Ответ #5 :
Июль 16, 2008, 11:59 »
__LINE__, __FILE__, ... - это макросы компилятора (не по теме)
в плюсах общераспространено использование костант...хотя, и макросы никто не запрещал.
лично я использую константы, т.к. в этом есть некоторое преимущество над макросами
Записан
Dodge
Гость
Re: как отсоединить модель от представления
«
Ответ #6 :
Июль 16, 2008, 12:24 »
Цитата: Константин от Июль 16, 2008, 11:59
__LINE__, __FILE__, ... - это макросы компилятора (не по теме)
ну если уж давится подробностями (
), то это макросы препроцессора... дело не в этом.
Разговор идет об использовании макроса NULL, который по сути является внутренним макросом и как я понимаю существующим на уровне стандарта.
Собственно вопрос был про рекомендация, он и остался.
«
Последнее редактирование: Июль 16, 2008, 13:26 от pastor
»
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: как отсоединить модель от представления
«
Ответ #7 :
Июль 16, 2008, 13:03 »
Цитата: Dodge от Июль 16, 2008, 11:17
Правельнее использовать макрос 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/
ритт
Гость
Re: как отсоединить модель от представления
«
Ответ #8 :
Июль 16, 2008, 13:21 »
во, хочу добавить ещё про нулл
все ведь читали на башорге про
> #define TRUE false
> #define FALSE true // счастливого дебага
?
нулл был изначально задуман чтобы стать популярным и потом делать такие пакости
Записан
Red Devil
Гость
Re: NULL vs 0
«
Ответ #9 :
Июль 16, 2008, 15:57 »
Использовать "0", кроме всего лучше еще по 2 причинам :
1) Его очень просто написать (нужно нажать всего лишь одну кнопку), т.е. помощь программисту который пишет код
2) Он читается проще и быстрее, помощь программисту читаюшему код.
Мне этот макрос всегда не нравился, но приучили на учебе, но после того как прочитал Страуструпа окончательно отказался от него.
Записан
Tonal
Гость
Re: NULL vs 0
«
Ответ #10 :
Июль 16, 2008, 21:04 »
В новом стандарте вводят константу
null_ptr
которая не будет приводится к интегральным типам.
Т.е. конструкции подобные null_ptr != 2 или buf[null_ptr] будут приводить к ошибкам компиляции в отличии от 0 != 2 или buff[NULL]
Записан
Red Devil
Гость
Re: NULL vs 0
«
Ответ #11 :
Июль 16, 2008, 22:02 »
Вообще-то массив нулевой длины и в текущем стандарте нельзя определить и все компиляторы маломальски поддерживающие стандарт генерируют ошибку времени компиляции на int a[0] или int a[NULL].
Записан
Tonal
Гость
Re: NULL vs 0
«
Ответ #12 :
Июль 17, 2008, 06:53 »
Я имел в виду не объявление а выражение:
Код:
char buf[10];
buf[NULL] = 5;
Страуструп возражал против макроса ввиду его полной бессмысленности. Т.к. его невозможно определить так, чтобы компилятор отлавливал подобные ошибки.
«
Последнее редактирование: Июль 17, 2008, 06:57 от Tonal
»
Записан
Red Devil
Гость
Re: NULL vs 0
«
Ответ #13 :
Июль 17, 2008, 10:59 »
О_о
я сомневаюсь чтобы кто-нибудь такое мог написать ... профессионал точно не напишет, для новичка это покажется слишком не логичным.
Записан
Dodge
Гость
Re: как отсоединить модель от представления
«
Ответ #14 :
Июль 17, 2008, 11:16 »
Цитата: Константин от Июль 16, 2008, 13:21
во, хочу добавить ещё про нулл
все ведь читали на башорге про
> #define TRUE false
> #define FALSE true // счастливого дебага
?
нулл был изначально задуман чтобы стать популярным и потом делать такие пакости
Всемирный заговор?
Цитата: pastor от Июль 16, 2008, 13:03
Цитировать
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
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...