Здравствуйте, enji, Вы писали:
fk0>> Это не более, чем плохонькая замена вложенным и анонимным функциям. В нормальных языках оно искаропки есть. E>Насколько я помню опыт дельфей, функция с кучей вложенных функций тоже далека от идеала ясности и легкости сопровождения.
Заставь дурака богу молиться...
E>Как вам могут помочь анонимные функции, я не понял.
fk0>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя. D>но в С++ есть локальные структуры.
fk0>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя. D>>но в С++ есть локальные структуры.
fk0> В голом C тоже есть.
Здравствуйте, Erop, Вы писали:
E>Всё понимаю, но при чём тут do{ } while( 0 ); -- не понимаю
Конструкция do { sequence } while( condition ); определяет последовательность действий, выполняемую, как минимум, один раз и прерываемую break-ом всюду внутри. По крайней мере, в нашей группе разработчиков это предельно ясно всем.
В предыдущем сообщении я говорил
, что "в многостадийной инициализации в случае облома на фоне return-ов и goto легко забыть что-нибудь убрать за собой, освободить какой-нибудь ресурс и пр., что и произошло в данном случае". И я систематически встречаюсь с подобной goto-induced багом в стороннем коде. Более мне добавить нечего.
Если goto тебе и твоим коллегам кажется более понятной конструкцией, используйте goto на здоровье.
C>Вот этот — точно нет. Потому что он даёт неправильный результат при вызове с указателем.
Увы, но отличить массив от указателя в С (не С++) нельзя никак.
Можно лишь ввести некоторую "защиту":
Здравствуйте, CaptainFlint, Вы писали:
CF>Здравствуйте, Erop, Вы писали:
... CF>Э-э… Боюсь показаться необразованным дураком, но что не так в этом коде? Неоднократно встречал, да и сам использовал… CF>/нервно оглядываюсь, ища куда бы заныкаться от неотвратимого гнева гуру/
По всей видимости речь идёт о:
1. накладных расходах при работе с ислючениями в С++.
2. неправильности использования исключений (в данном случае) для передачи управления. Например, в отладчике это исключение может ловится в то время, как никакой исключительной ситуации не наступило; обычная, заранее предусмотренная передача управления.
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Здравствуйте, Кондраций, Вы писали:
CF>>Э-э… Боюсь показаться необразованным дураком, но что не так в этом коде? Неоднократно встречал, да и сам использовал… CF>>/нервно оглядываюсь, ища куда бы заныкаться от неотвратимого гнева гуру/ К>По всей видимости речь идёт о: К>1. накладных расходах при работе с ислючениями в С++. К>2. неправильности использования исключений (в данном случае) для передачи управления. Например, в отладчике это исключение может ловится в то время, как никакой исключительной ситуации не наступило; обычная, заранее предусмотренная передача управления.
1. ЕМНИП, если исключения не происходит, накладные расходы там мизерные. Во всяком случае, когда я в своей проге их замерял (для далеко не самых навороченных функций), разница в производительности оставалась в пределах погрешностей.
2. Ну, здесь как и с любым инструментом: если кто-то пихает его, где ни попадя, это значит, что плох программист, а не инструмент. Не знаю, я подобные try-catch применяю в таких случаях, как, например, проверка входных данных.
N_>Полностью согласен Но реали таковы что приходится поддерживать код, который написан неидеально и встречаются длинные функции. Я предпочту встретить внем брейк, вместо гоуту неизвестно куда.
Вообще-то ровно наоборот. Найти, куда ведет готу — одно нажатие на шоткат поиска. Найти, где конец этого цикла — задача гораздо менее тривиальная.
Здравствуйте, CaptainFlint, Вы писали:
CF>1. ЕМНИП, если исключения не происходит, накладные расходы там мизерные. Во всяком случае, когда я в своей проге их замерял (для далеко не самых навороченных функций), разница в производительности оставалась в пределах погрешностей.
Ветка под условием XXX наверняка не единственная; раз так — стоит ожидать более-менее единообразной обработки в разных if-ах. Сказать определённо нельзя, но в данном случае стоит ожидать, КМК, достаточно частого выброса исключений.
Еще одно — поддержка исключений в С++ требует линковки CRT.
CF>2. Ну, здесь как и с любым инструментом: если кто-то пихает его, где ни попадя, это значит, что плох программист, а не инструмент. Не знаю, я подобные try-catch применяю в таких случаях, как, например, проверка входных данных.
Ну тут много зависит, кроме желаний программиста, от:
1. возможностей библиотек, которые ты используешь (т.е. представляют ли они альтернативы исключениям);
2. прогнозируемой частоты неверных входных данных (если важна производительность).
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Здравствуйте, Vamp, Вы писали:
V>Вообще-то ровно наоборот. Найти, куда ведет готу — одно нажатие на шоткат поиска. Найти, где конец этого цикла — задача гораздо менее тривиальная.
Это если все писать в notepad-е. (Кстати, а где у него шорткат поиска?) Уже в notepad++ можно видеть границы блоков. А если еще и нормальную IDE взять, там блоки выделяются просто кликом в районе фигурной скобки.
P>Это если все писать в notepad-е. (Кстати, а где у него шорткат поиска?)
Ctrl-F с утра было. Но вообще-то должен заметить, что между notepad и IDE лежит чертова уйма редакторов. И далеко не всегда есть возможность пользоваться IDE.
P>А если еще и нормальную IDE взять, там блоки выделяются просто кликом в районе фигурной скобки.
Только надо еще начало блока найти для этого. А если блок не помещается на экран — это тоже не элементарно.
fk0>>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя. D>>>но в С++ есть локальные структуры. fk0>> В голом C тоже есть. D>но в голом С в этих структурах нет методов
Здравствуйте, Vamp, Вы писали:
V>Ctrl-F с утра было.
А, ну да. В пятницу вечером, да еще если не запускал его давненько, забыл.
V>Но вообще-то должен заметить, что между notepad и IDE лежит чертова уйма редакторов.
Т.е. относительно notepad++ возражений нет?
V>И далеко не всегда есть возможность пользоваться IDE.
А когда в нормальной работе нет возможности пользоваться IDE? Мне приходит в голову только древний Workbench от Microsoft на 80286. Правда, я не знаю положение дел на мэйнфреймах.
V>Только надо еще начало блока найти для этого. А если блок не помещается на экран — это тоже не элементарно.
Это достаточно просто. Нормальная IDE сама отмечает границы блоков.
fk0>>>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя. D>>>>но в С++ есть локальные структуры. fk0>>> В голом C тоже есть. D>>но в голом С в этих структурах нет методов
fk0> void (*TheMethodOfMyStructure)(void);
хех Ну как минимум здесь ты платишь цену косвенного вызова, то есть это виртуальный метод С++, а не обычный.
Во-вторых, непонятно почему без аргументов, а не void (*TheMethodOfMyStructure)(struct tag* self);
Но я не понимаю о чем спор вообще? В С++ есть красивый способ кодирования: допустим тебе нужно написать мощную функцию/метод (которая делает что-то нетривиальное). Тогда внутри этой функции ты определяешь локальную структуру, которая будет "движком" этой функции, локальные переменные этой функции ты обычно затягиваешь внутрь этой структуры, чтобы методы структуры могли с ней работать. Ну и заодно десторуктор этой струткуры занимается освобождением ресурсов. В С такого стиля нет.
P>Т.е. относительно notepad++ возражений нет?
Никогда не пользовался.
P>А когда в нормальной работе нет возможности пользоваться IDE? Мне приходит в голову только древний Workbench от Microsoft на 80286. Правда, я не знаю положение дел на мэйнфреймах.
Например, мне неизвестна НОРМАЛЬНАЯ (в твоем понимании) IDE под Солярис. Тебе известна?
P>Это достаточно просто. Нормальная IDE сама отмечает границы блоков.
Будь ласка, перечисли нормальные ИДЕ
Здравствуйте, Vamp, Вы писали:
P>>Т.е. относительно notepad++ возражений нет? V>Никогда не пользовался.
Попробуй.
V>Например, мне неизвестна НОРМАЛЬНАЯ (в твоем понимании) IDE под Солярис. Тебе известна?
NetBeans?
V>Будь ласка, перечисли нормальные ИДЕ
Какие у тебя критерии нормальности IDE? Как по мне, IDEA, Студия, тот же NetBeans, местами даже Eclipse... Во всяком случае средства, помогающие анализировать код, есть у всех.