Название: NULL vs 0 Отправлено: Hort от Июля 16, 2008, 02:27 Что правильнее: использовать 0 или NULL в С++?
Название: Re: как отсоединить модель от представления Отправлено: Пантер от Июля 16, 2008, 11:14 Кажись правильнее в С++ 0.
Название: Re: как отсоединить модель от представления Отправлено: Dodge от Июля 16, 2008, 11:17 Правельнее использовать макрос NULL
Название: Re: как отсоединить модель от представления Отправлено: Sergey B. от Июля 16, 2008, 11:28 В C++ не рекомендуется использовать макросы.
Название: Re: как отсоединить модель от представления Отправлено: Dodge от Июля 16, 2008, 11:54 В C++ не рекомендуется использовать макросы. Ну имеется ввиду наверно пользовательские макросы... как же быть без __LINE__, __FILE__, __PRETTY__FUNCTION__ ? ;DЗ.Ы. Это рекомендация из нового стандарта? Название: Re: как отсоединить модель от представления Отправлено: ритт от Июля 16, 2008, 11:59 __LINE__, __FILE__, ... - это макросы компилятора (не по теме)
в плюсах общераспространено использование костант...хотя, и макросы никто не запрещал. лично я использую константы, т.к. в этом есть некоторое преимущество над макросами Название: Re: как отсоединить модель от представления Отправлено: Dodge от Июля 16, 2008, 12:24 __LINE__, __FILE__, ... - это макросы компилятора (не по теме) ну если уж давится подробностями ( ;D), то это макросы препроцессора... дело не в этом.Разговор идет об использовании макроса NULL, который по сути является внутренним макросом и как я понимаю существующим на уровне стандарта. Собственно вопрос был про рекомендация, он и остался. Название: Re: как отсоединить модель от представления Отправлено: pastor от Июля 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; Название: Re: как отсоединить модель от представления Отправлено: ритт от Июля 16, 2008, 13:21 во, хочу добавить ещё про нулл :)
все ведь читали на башорге про > #define TRUE false > #define FALSE true // счастливого дебага ? нулл был изначально задуман чтобы стать популярным и потом делать такие пакости :) Название: Re: NULL vs 0 Отправлено: Red Devil от Июля 16, 2008, 15:57 Использовать "0", кроме всего лучше еще по 2 причинам :
1) Его очень просто написать (нужно нажать всего лишь одну кнопку), т.е. помощь программисту который пишет код 2) Он читается проще и быстрее, помощь программисту читаюшему код. Мне этот макрос всегда не нравился, но приучили на учебе, но после того как прочитал Страуструпа окончательно отказался от него. Название: Re: NULL vs 0 Отправлено: Tonal от Июля 16, 2008, 21:04 В новом стандарте вводят константу null_ptr которая не будет приводится к интегральным типам.
Т.е. конструкции подобные null_ptr != 2 или buf[null_ptr] будут приводить к ошибкам компиляции в отличии от 0 != 2 или buff[NULL] Название: Re: NULL vs 0 Отправлено: Red Devil от Июля 16, 2008, 22:02 Вообще-то массив нулевой длины и в текущем стандарте нельзя определить и все компиляторы маломальски поддерживающие стандарт генерируют ошибку времени компиляции на int a[0] или int a[NULL].
Название: Re: NULL vs 0 Отправлено: Tonal от Июля 17, 2008, 06:53 Я имел в виду не объявление а выражение:
Код: char buf[10]; Название: Re: NULL vs 0 Отправлено: Red Devil от Июля 17, 2008, 10:59 О_о
я сомневаюсь чтобы кто-нибудь такое мог написать ... профессионал точно не напишет, для новичка это покажется слишком не логичным. Название: Re: как отсоединить модель от представления Отправлено: Dodge от Июля 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. Название: Re: NULL vs 0 Отправлено: vregess от Июля 18, 2008, 08:44 ноль все же лучше
Название: Re: как отсоединить модель от представления Отправлено: Alex Custov от Августа 01, 2008, 15:00 Но NULL в зависимости от реализации не обязан быть именно 0. Это зависит от фантазии разработчиков компилятора. это зависит от libc, не зря NULL описан в разделе 18 "Language support library". Лично мне не известно ни одной реализации, где NULL был бы отличен от 0, но это не означает, что таких реализаций не может быть вообще. Поэтому программистам С++ рекомендуют использовать 0 вместо NULL. Сам NULL тут ни при чём, и скорее всего что он будет именно 0. Тут дело в бинарном представленни нулевого указателя, и компилятор должен отслеживать присвоения типа ptr = 0; и использовать implementation-defind value в качестве бинарного представления нулевого указателя. |