Russian Qt Forum
Февраля 20, 2025, 19:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
NULL vs 0
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: NULL vs 0 (Прочитано 18125 раз)
Hort
Гость
NULL vs 0
«
:
Июля 16, 2008, 02:27 »
Что правильнее: использовать 0 или NULL в С++?
«
Последнее редактирование: Июля 16, 2008, 13:25 от pastor
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5877
Жаждущий знаний
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...