dxp 65 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба А вот тут zltigo не прав. Цитирую Страуструпа: Это всего лишь личное мнение Страуструпа :-)))) который и затвердил :-( его в своей реализации ++. Личное мнение Страуструпа является стандартом - он автор. :) Я не слишком слежу за процессом стандартизации C++, но похоже комитет пока еще не родил стандарта :-(. Стандарт давно принят - аж в 1998 году. Уже приличное время ходят обсуждения следующей версии. Короче в С++ болезнь вместо лечения ( введением ключевого слова, как в Паскале) была загнана вовнутрь наложением исскуственного требования иметь внутреннее представление нулевых указателей нулевым. И с легкостью необыкновенной считать, что ключевое слово для нулевого указателя это "0". Какая болезнь? Отказ от определения NULL, как (void*)0? Сказано же, что объектов по нулевому адресу быть не может, поэтому указатель с адресом 0 невалиден. И 0 вполне однозначно определяет ситуацию благодаря стандартному преобразованию типа. Зачем тут плодить лишние сущности языка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба В моей полной цитате речь шла о проблеме более широко: - не только по отношению к C++, но и к C (более того это был именно кусок по С ); - по отношению к разным платформам, как например должен выглядеть Страуструповский 0 на платформе типа Cray-Cyber с кольцевыми указателями? А разве в С есть operator new? Про Cray не знаю ничего кроме "Цыпленок Cray перебежит дорогу быстрее всех, но если перед стартом его не окунуть в жидкий азот, то на той стороне дороги он появится в уже зажаренном виде" :-) На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. По-моему так! (с) Винни-Пух. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба Какая болезнь? Отказ от определения NULL, как (void*)0? Нет, отсутствие ключевого слова для нулевого указателя. Сказано же, что объектов по нулевому адресу быть не может... Так папа сказал. Аминь. А нежели кому в железе чего такого захочется сотворить: На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к "принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается разобраться. Не по душе мне такой уровень абстракции :-( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Concorde 0 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба Нет, отсутствие ключевого слова для нулевого указателя. Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ? Уровень языка (достаточно низкий) и подразумевает изпользование константы. И большое спасибо, а то бы получился очередной паскаль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ? Какая разница какое( ну NIL ). Любое, главное не строились мутные на мой взгляд преобразования типа "ничего не возвратили" поскольку вообще-то оттуда возвращают указатели, то будем считать, что возвратили "никакой указатель" далее считаем, что по никакому указателю лежит "ничего" ну а дальше просто пусть это ничего будет "0" - так и запишем :-( И большое спасибо, а то бы получился очередной паскаль. Вы часом меня не за преверженца Паскаля да еще в его Борландовской реинкарнации приняли? Отвечу - нет, что отнюдь не заставляет меня априори его не признавать и не замечать его отдельные достоинства в части четкости выражения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба Какая болезнь? Отказ от определения NULL, как (void*)0? Нет, отсутствие ключевого слова для нулевого указателя. Если так хоцца слово, то Вы можете его сами себе сотворить по вкусу - Сергей Борщ приводил цитату, там как раз было именно это. Заодно снимаются вопросы о самом слове - какое хоцца, такое и используйте. Вполне гибко и демократично. А в языке слова нет просто потому, что оно реально не нужно. Это лишняя сущность. Язык С++ и без этого достаточно сложен и чрезвычайно перегружен, поэтому сделано по минимуму. Все логично. А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) :) Сказано же, что объектов по нулевому адресу быть не может... Так папа сказал. Аминь. Ну, если папа - Деннис Ричи, то да. :) На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к "принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается разобраться. Не по душе мне такой уровень абстракции :-( Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Все там вполне однозначно. И физическое представление нулевого указателя вполне конкретно, просто оно определяется не Стандартом, а реализацией, только и всего, что опять же вполне логично. На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Наличие специального ключевого слова совершенно ничего не меняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 4 августа, 2006 Опубликовано 4 августа, 2006 · Жалоба А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) :) И я ей пользуюсь :-) Ибо, как минимум, не люблю веспорядочно расскиданные по тексту "0" :-) А вообще сыр-бор с уходом в сторону от темы new() в тему NULL начался с моей фразы: Ну а то, что автору, цитаты, что NULL, что 'zero' все едино - еще раз указывает на его некомпетентность. При этом имелось ввиду отнюдь не способность компилятора разобраться в контексте, а покоробившее меня поминание именно "0" вместо "нулевого указателя" в качестве значения возврашаемого функцией для которой возврашаемым значением является указатель. Я понимаю, что в данной MS инструкции (а это именно четкая фраза от MS - можете поиском воспользоваться) указывается прямое действие пользователю - "пиши 0 и не парься", но тем не менее, подмена физической сущности в инструкции мне не нравится. Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Да нет, так - шероховатость, просто это привлекло неожиданно для меня самого повышенное внимание и понеслось.... На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Аналогично :-). Нынеживущие платформы наверное все такие. Ну а в будующем? Не знаю даже. Ведь всяких архитектур с ненулевыми нулевыми указателями и с указателями разных размеров для разных типов указателей было немало. Это было в эпоху, когда за счет архитектурных ухищрений добивались упрощения и/или увеличения производительности. Потом настали времена когда "патронов не жалеть" (в смысле транзисторов) и мегагерцы гнались легко. Сейчас лафа кончается - мегагерцы на исходе и пожалуй опять начнутся архитектурные гонки. И каким будет физическое представление нулевого указателя - это вопрос :-). Компиляторы конечно разберутся с "0" и в этом случае, но не красиво это как-то. Вот собственно пожалуй и все по теме "0" и "нулевой указатель" неожиданно вылезшей в теме по MMU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 5 августа, 2006 Опубликовано 5 августа, 2006 · Жалоба А вот мои 5 рублей. Мне вот тоже не нравится такое неуважительное отношение к нулевому указателю. В Паскале, с которого я начинал это сделано более чем идеально. Ну а стандарт С++ из-за этого какой-то "кривой". (редко я соглашаюсь с zltigo) Писал как-то свой менеджер памяти на 486 системе. Да ещё в защищенном 32-битном режиме. Так вот было два сегмента - один для данных, другой для служебной информации. И мне было ну очень удобно выделять память данных с самого нуля. Тогда же я условился считать пустым указателем 0xFFFFFFFF. Ну и с тех пор пытаюсь даже на СИ не путать указатели с числами и использовать NULL. Короче, смысл в этом есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться