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

Поиск:

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



****


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

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



Цитата(Любитель @  7.11.2009,  02:08 Найти цитируемый пост)
Кстати, кутешный кодестайл не рекомендует использовать NULL

ой, мозоль уже набили, да накакать на троллей, как и на гугл, как и на мотороллу, если они неправы. 
Не верьте никому, выбирайте правильные ориентиры. 
Я никогда не признаю моторолловские "не используйте пространства имен", гугловские и троллтечные регистры имен файлов, когда дело касается имен классов в них содержащихся, про исключения вообще молчу.
PM MAIL   Вверх
mes
Дата 7.11.2009, 11:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Anikmar @  7.11.2009,  01:28 Найти цитируемый пост)
Если честно, уже сам сомневаюсь, но цифра 0 вроде всегда считалась int, а потом приводилась к типу void * .
Если 0 используется в контексте указателя разве там не идет преобразование int->void* ? 

а "1 " должен соблюдат
Цитата(Anikmar @  7.11.2009,  01:28 Найти цитируемый пост)
но цифра 0 вроде всегда считалась int, а потом приводилась к типу void * .

это Вы про C++ ? тогда
1. Чем в таком случае  "1" отличается от "0" ?
2. Почему (в Cpp) не работает конструкция : int * i = (int)(void*) 1;

smile

Добавлено через 4 минуты и 24 секунды
Цитата(zkv @  7.11.2009,  01:33 Найти цитируемый пост)
ой, мозоль уже набили, да накакать на троллей, как и на гугл, как и на мотороллу, если они неправы. 

 smile 
всегда надо обдумывать почему введено то и другое правило ?
Зачастую эти ограничения приводят к некоторой ущербности, но делают это для того, чтоб  так называемо "облегчить" жизнь программисту.
имхо, одна из причин, чтоб не было проблем со стыковкой с неграмотно написанным кодом, как например в случае с констанстностью.
Проще ведь запретить использовать, чем научить использовать правильно smile
 smile 



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


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


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

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



Цитата(Anikmar @  7.11.2009,  02:28 Найти цитируемый пост)
Если 0 используется в контексте указателя разве там не идет преобразование int->void* ? 

Ну.. что значит преобразование. Если 0 используется в контексте любого указателя плюсовый компилятор обязан его интерпретировать как нулевой указатель нужного типа.

Цитата(zkv @  7.11.2009,  02:33 Найти цитируемый пост)
ой, мозоль уже набили, да накакать на троллей, как и на гугл, как и на мотороллу, если они неправы. 
Не верьте никому, выбирайте правильные ориентиры. 
Я никогда не признаю моторолловские "не используйте пространства имен", гугловские и троллтечные регистры имен файлов, когда дело касается имен классов в них содержащихся, про исключения вообще молчу. 

Ну, я ж написал, что "полуофтоп". Вроде и по теме - но никому ничего этим доказать я само собой не собирался (ибо да, я понимаю, по большому счёту это не аргумент).

Лично моё предпочтение к 0 вместо NULL обуславливается двумя причинам:
1. Субъективная: меня раздражают идентификаторы в стиле ALL_IN_UPPER_CASE smile 
2. Объективная (хотя и не столь уж важная): если у нас есть хидер класса, которому (с точки зрения простой логики) не нужны никакие инклюды, мы хотим указать значение по умолчанию в качестве нулевого указателя в каком-либо методе, то.. Для NULL придётся добавить инклюд на cstddef/stddef.h.

Добавлено через 1 минуту и 29 секунд
mes, перечитал два раза твой пост - и так не понял, на какой ты "стороне"? smile


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



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

таки int ;)
Код

#include <iostream>
#include <cstddef>

int main()
{
    std::cout<<sizeof(short)<<", "<<sizeof(typeof(0))<<", "<<sizeof(typeof(NULL))<<std::endl;
    return 0;
}

2, 4, 8 
на моем core2duo, x86_64, gcc 4.3.2

Добавлено через 4 минуты и 54 секунды
Цитата(Любитель @  7.11.2009,  11:47 Найти цитируемый пост)
Если 0 используется в контексте любого указателя плюсовый компилятор обязан его интерпретировать как нулевой указатель нужного типа.

возможно это в стандарте, но это + к списку граблей с т. з. грамматики языка
и к тому же нелогично
0 - это целое число, а множество значений адресов, формально говоря, не является надмножеством целых чисел ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


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


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

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



Цитата(MAKCim @  7.11.2009,  11:56 Найти цитируемый пост)
таки int ;)

0 - это нечто страшное smile И его тип определяется по контексту использования.

Цитата(MAKCim @  7.11.2009,  11:56 Найти цитируемый пост)
возможно это в стандарте, но это + к списку граблей с т. з. грамматики языка
и к тому же нелогично
0 - это целое число, а множество значений адресов, формально говоря, не является надмножеством целых чисел ;) 

Да, это косяк стандарта, на мой взгляд. Именно потому было предложение про nullptr. Текущие решения ИМХО оба костыльны. Впрочем, целые числа и логический тип (по идее) тоже не должны пересекаться - в С++ здесь лучше (чем в С - впрочем для С это как раз не минус, ибо другой уровень, другое мышление), новполне возможен неявный кастинг..

Да-да, полтора года работы на шарпе дают о себе знать...


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  7.11.2009,  12:37 Найти цитируемый пост)
в С++ здесь лучше

в обычном (ansi) C bool'а нет, так что что там будет пдразумеваться под bool зависит от программиста ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


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


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

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



Да, я знаю. И это плохо smile 
В С++ же он есть - и это хорошо.
    Но неявный кастинг из чисел - это плохо smile


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  7.11.2009,  13:17 Найти цитируемый пост)
Но неявный кастинг из чисел - это плохо

ничего не каститься, возвращается int
а вот семантика if (...) и аналогов использует значения 0 и не 0
и это абсолютно независимые вещи ;)
а вот в C++ идет как раз каст в bool 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


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


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

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



Ээ.. ну я и говорю про С++.

Цитата(Любитель @  7.11.2009,  13:17 Найти цитируемый пост)
Да, я знаю. И это плохо smile

Это речь про С.

Цитата(Любитель @  7.11.2009,  13:17 Найти цитируемый пост)
В С++ же он есть - и это хорошо.

Про С++.

Цитата(Любитель @  7.11.2009,  13:17 Найти цитируемый пост)
Но неявный кастинг из чисел - это плохо smile 

"Но" к последней фразе. Тоже про С++.

Сорри, если неясно выразился smile


--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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