Alf
Гость
|
|
« Ответ #30 : 16-12-2005 08:00 » |
|
Это бесспорно ugly hack. Не должен высокоуровневый язык позволять осуществлять такие приёмы. Этот "блестящий" прием напомнил мне знаменитую статью Поста: - настоящие программисты используют самомодифицирующий код, особенно в тех случаях, когда это экономит 20 наносекунд в середине очень короткого цикла; (С) Ed Post, "Настоящие программисты не используют Паскаль".
|
|
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #31 : 16-12-2005 08:16 » |
|
Вполне законно. Имя переменной во вложенном блоке скрывает внешнюю. Здесь важно то, с какого момента происходит сокрытие имен: int main() { const int i = 10; { int i[i]; //эквивалентно int i[12] } }
Внешнее имя становится недоступно в конце полного декларатора, который в данном случае заканчивается после ']'. Верно ли я понял, что int main() { int i = 10; { printf("%d /n", i); double i = 12.124; printf("%f /n", i); } printf("%d /n", i); } Выведет 10 12.124 10? int i[i]; //эквивалентно int i[12]
почему эквивалентно int i[12], а не int i[10] ? или это прпосто очепятка?
|
|
« Последнее редактирование: 04-12-2007 20:21 от Алексей1153++ »
|
Записан
|
|
|
|
REM
Гость
|
|
« Ответ #32 : 16-12-2005 12:15 » |
|
Этот "блестящий" прием напомнил мне знаменитую статью Поста: Прочитал статью -- супер. Может быть имеет смысл поместить её в раздел Статьи -> Переводы ?
|
|
|
Записан
|
|
|
|
REM
Гость
|
|
« Ответ #33 : 16-12-2005 12:17 » |
|
To ALL Раз уж пошла такая пьянка, предлагаю обсудить всё то, что мы не любим в любимом языке. Благо, это вроде вполне соответствует теме. Для затравки вот такой пример кода: int f( int ( ) );
Кто первый правильно ответит что сей код означает? Компиллятором, чур, не пользоваться!! :nottrue:
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 16-12-2005 12:21 » |
|
функция типа int и с аргументом - int (конструктор инта - по умолчанию) ?
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #35 : 16-12-2005 12:21 » |
|
Прочитал статью -- супер. Может быть имеет смысл поместить её в раздел Статьи -> Переводы ? Статья действительно блестящая, причем давняя, когда-то ходила по рукам еще не бобинах магнитной ленты задолго до появления персоналок. Однако у нас на сайте принципиально публикуются только собственные статьи, никакого плагиата. Поэтому лучше было бы разместить ссылку на нее.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #36 : 16-12-2005 12:24 » |
|
Раз уж пошла такая пьянка, предлагаю обсудить всё то, что мы не любим в любимом языке. Я бы ответил одним словом - эклектичность. Отсюда вытекают все остальные грехи, которые можно перечислять очень долго.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #37 : 16-12-2005 12:26 » |
|
а, нет функция типа int и с аргументом - "указатель на функцию типа int без аргументов"
|
|
|
Записан
|
|
|
|
REM
Гость
|
|
« Ответ #38 : 16-12-2005 12:42 » |
|
Функция типа int и с аргументом - "указатель на функцию типа int без аргументов" В точку. В C++ можно делать объявления переменных и типов не указывая имён параметров. Лично я вижу в этом большой минус. ИМХО, программисты часто недооценивают значение чётких и ясных имён. А зря. Недаром один из рефакторигов Мартина Фаулера называется Rename Method.
|
|
|
Записан
|
|
|
|
Hooter
|
|
« Ответ #39 : 16-12-2005 12:45 » |
|
В C++ можно делать объявления переменных и типов не указывая имён параметров. Лично я вижу в этом большой минус. ИМХО, программисты часто недооценивают значение чётких и ясных имён.
Разве это - минус языка? Имхо, это - минус программиста
|
|
|
Записан
|
|
|
|
REM
Гость
|
|
« Ответ #40 : 16-12-2005 12:47 » |
|
Я бы ответил одним словом - эклектичность. Отсюда вытекают все остальные грехи, которые можно перечислять очень долго.
Круто. Пришлось даже заглянуть в словарь Не могу не согласиться. И виноват здесь даже не сам C, а сама попытка построить ОО язык на костях структурного языка.
|
|
|
Записан
|
|
|
|
REM
Гость
|
|
« Ответ #41 : 16-12-2005 12:56 » |
|
Разве это - минус языка? Имхо, это - минус программиста ИМХО, это как раз минус языка. Язык должен "заставлять" нас писать правильный код. Ведь и технику Duffs-device тоже можно не применять. Однако пока есть такая возможнось, будут находиться программисты, которые используют эти "дыры". Результатом, как правило, является непонятный код, не позволяющий производить модификацию.
|
|
|
Записан
|
|
|
|
Olegator
|
|
« Ответ #42 : 16-12-2005 13:05 » |
|
Я бы ответил одним словом - эклектичность. А это что за слово такое.
|
|
|
Записан
|
|
|
|
Hooter
|
|
« Ответ #43 : 16-12-2005 13:05 » |
|
ИМХО, это как раз минус языка. Язык должен "заставлять" нас писать правильный код. ... Результатом, как правило, является непонятный код, не позволяющий производить модификацию.
Я все-таки склонен считать, что язык ничего не должен разработчику. При желании, в любом языке можно найти минусы. Даже в русском Например, от того, что в русском языке есть мат, это не значит, что его нужно использовать направо и налево. Результатом непонятного кода является не язык, а его неправильное использование. Например, непонятно что делает функция float fn(int ch) , хотя ее объявление сделано по всем правилам. А если написать float getCarrierFrequency(int channel) , то многое становится понятным (в конкретной предметной области, разумеется).
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #44 : 16-12-2005 13:33 » |
|
А это что за слово такое. Коротко говоря, это когда все свалено в одну большую кучу, и каждый роется в ней в поисках того, что ему больше подходит. Ну или довольствуется тем, что сможет найти,тут уж кому как повезет. Бессистемность то бишь. Вроде как есть такие модные сувениры - перочинные ножики на 154 предмета. Тут тебе и ножницы, и открывалка для консервов, и отвертка, и даже штопор. Однако многие предпочитают использовать настоящие ножницы и настоящую отвертку, а ножик открывают, только когда под рукой ничего больше нет.
|
|
|
Записан
|
|
|
|
NetRaider
Гость
|
|
« Ответ #45 : 16-12-2005 22:07 » |
|
Верно ли я понял, что
int main() { int i = 10; { printf("%d /n", i); double i = 12.124; printf("%f /n", i); } printf("%d /n", i); }
Выведет 10 12.124 10?
Верно. int i; //эквивалентно int i[12]
почему эквивалентно int i[12], а не int i[10] ? или это прпосто очепятка? Да, опечатка.
|
|
|
Записан
|
|
|
|
Olegator
|
|
« Ответ #46 : 31-12-2005 09:33 » |
|
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #47 : 31-12-2005 09:44 » |
|
Если ты будеш только искать достоинства и недостатки инструментов. Ты никогда не воспользуешся ими. Пользуйся и все. Каждый инструмент служит для своих целей. Кувалдой ты не будеш чинить часы. А молоточком для часов вбивать сваи. Это единственный критерий должен быть. Язык С и С++ это универсальные языки, в той или иной степени подходяшие для решения любых задач.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Olegator
|
|
« Ответ #48 : 31-12-2005 10:49 » |
|
Ладно, больше не буду.
|
|
|
Записан
|
|
|
|
|