Как стать автором
Обновить
9
0
Кирилл @EvilBlueBeaver

Пользователь

Отправить сообщение
Леха из подсолнухов делает ПРЕВЕЕЕЕЕД ))
Любой рекурсивный алгоритм можно перевести в цикл с самопальным стеком. Согласен c mixrin, что там где нет TCO не надо использовать рекурсию. А уж тем более не надо потакать таким подходам невообразимо увеличивая стек.
А какое отношение Canonical имеет к Gnome?
Да что вы говорите?! А каким же тогда он является приложением, если не жабовским?
За такое руки надо отрывать.
1) А почему бы не поставить флеш из репозитория. Ну или если нету в репозитории, то из оверлея (хз как называются оверлеи в убунте)
2) Даже если и решили ставить вручную, ставить надо в хомяк, чтобы потом не получить лишний гемор.

Windows-way оставьте окнам.
Есть еще такие люди, как тестеры. Это их работа!
А у меня ваша мама (Ирина Валентиновна) вела физику в университете. Одна из моих любимых преподавателей. Я ведь правильно понял, что она ваша мама?
Ну так значит и erlang этим людям не нужен, если они не в состоянии понять)
Да нормальный там синтаксис. Но тут же не только синтаксис добавили, они ж еще и объекты туда воткнули зачем-то.
Кто-нибудь объяснит мне, зачем оно вообще нужно?
inline, насколько я помню, в plain-c отсутствует, кроме того inline — это РЕКОМЕНДАЦИЯ компилятору заинлайнить функцию, а не приказ.

Про Кнута, меня вот в последнее время веселит мания людей упоминать эту фразу. Оптимизация это когда изначально код хороший и четкий, но мы делаем из него быдлокод, чтобы оно быстрее работало. А сейчас это стали употреблять во всех случаях где надо и не надо. Допустим по алгоритму очевидно, что нужен контейнер с временем доступа O(1) и возможностью расширения. Ничто не мешает использовать vector, но люди воткнут list прикрываясь тем, что «преждевременная оптимизация — корень всех зол»

P.S. Лично я не согласен с конкретным примером топикстартера по использованию goto в данном случае.
1. А то, что в вышестоящей функции вам так же придется обрабатывать эти коды после каждого блока

2. free и malloc это низкоуровневые инструменты. Это и есть те самые аллокаторы, о которых я писал, но это не значит, что каждая вторая функция должна выделять память и возвращать указатель на нее. Вот это уже будет похлеще goto, программа вроде работает и правильно работает, но блин память потихоньку куда-то девается

3. А про Кернигана это вообще смешно. Как будто у создателя молотка есть надежда, что пользователь этого молотка не треснет себе по пальцам? Однако же при работе с молотком есть такая вещь как техника безопасности, в которой явно указывается, что по пальцам себе бить не стоит. Не, вы конечно можете это сделать, но это будут уже сугубо ваши проблемы.
Ага, и каждый из таких логических блоков будет в качестве результата возвращать код ошибки. Таков уж стиль С и такие ситуации в С -программировании встречаются весьма и весьма часто.

А по поводу освобождения ресурсов. Где-то слышал мнение о том, что в идеале программа на С должна освобождать выделенную память в том же логическом блоке, в котором она была выделена. В противном случае вы можете долго и непринужденно ловить утечки памяти. Ну исключением из этого правила являются разве что аллокаторы, но это отдельная песня. Это в java можно создать объект и вернуть ссылку на него, авось GC потом разберется. А в си надеяться на то, что вызывающий код освободит выделенную в данной функции память не стоит.
Кроме того, если между операциями надо что-то делать, причем только если операция была успешной, то у вас добавится еще куча условий. И ради чего все это? Ради того, что какой-то дядя сказал, что goto плохо и не надо его использовать вообще никогда?
Ну вообще я написал, что это С.

А ваш вариант плох вот чем. Операции между вызовами надо делать только в случае успеха предыдущей операции, а у вас они будут выполняться в любом случае и так, пока не дойдем до return'а. Ну и кроме того ненужные сравнения, когда нам уже известно, что можно завершить выполнение кода.

Все жа наиболее равнозначной заменой будет функция-обертка, но это уже лишнее усложнение.
Вопрос, а зачем это было делать, если goto уже обеспечивает отличную читаемость да и в принципе должен быть оптимальным по количеству инструкций? Из каких-то религиозных соображений? Так вот про этим самые религиозные соображения и говорил ТС и я с ним согласен.
Никто не говорит, что в высокоуровневых языках надо использовать goto. Для конкретно моего случая там есть исключения и функции возвращают обычно результат, а не код ошибки. Но на plain-c это по-моему наиболее удобный и быстрый способ.
Куча лишних ненужных проверок
А если между вызовами нужно делать еще какие-то операции? например печатать в лог?

Информация

В рейтинге
Не участвует
Откуда
Волгоград, Волгоградская обл., Россия
Дата рождения
Зарегистрирован
Активность