1. C++ / Говнокод #8107

    +167

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    #define BREAKABLE_SECTION() for(;;)
    
    BREAKABLE_SECTION()
    {
        ::Packet * pPacket;
        res = ReadPacket(pPacket);
    
        if(ERR_OK == res)
        {
            res = pConstructor->PutPacket(pPacket);
    
            if(ERR_OK == res)
            {
                res = pConstructor->GetFrame(data);
            }else
            {
                //TODO:add handler of statuses other than err_ok
            }
    
            if (ERR_OK ==res)
            {
                break;
            }else
            {
                //TODO:add handler of statuses other than err_ok
            }
        }else
        {
            break;
        }
        break;
    }

    перешел в новый проект где предложили изучить существующий код в огромном объеме - а он весь из таких циклов

    Запостил: openclgovno, 06 Октября 2011

    Комментарии (81) RSS

    • > if(ERR_OK == res)
      это проклятье флагов
      Ответить
    • opengovno
      Ответить
    • 1. ну уж конечно BREAKABLE_SECTION() читабельнее for(;;). какой с него толк? поиск по исходникам?
      2. писать goto не кошерно, а по другому не умеют - вот и заменили бряками
      Ответить
      • Эксепшены так и просятся
        Ответить
        • эксепшенов в сях мне всегда очень нехватало...
          Ответить
          • >эксепшенов в сях
            setjmp(),longjmp()...оно?
            Ответить
            • Спасибо, кэп, стандартную библиотеку я знаю хорошо. Такие эксепшены даром не нужны.
              Ответить
              • >даром не нужны
                А обычно платите?

                Ну тогда минимум 3 варианта:
                - выбрать другой инструмент;
                - _продвинуть_ в следующий стандарт идею введения исключений;
                - написать/переписать свой язык.
                Ответить
                • > А обычно платите?
                  да, время на внедрение, знаете ли, денег стоит
                  Предложенные варианты нельзя было использовать, когда писал на си. Просто жалел, что приходится писать кучу непонятного кода, который можно было бы сократить и упростить с помощью исключений.
                  Ответить
                  • >время на внедрение
                    т. е. изначально архитектура не предполагала наличия некого подобия механизма исключений — тогда да.
                    Ответить
                    • Изначально не предполагала. Переписывать полмиллиона строк кода промышленного сервера никто не будет.
                      Ответить
                      • забавно будет, если эти полмиллиона строк превратятся в 50,000 строк на каком-нибудь сверх-высоком языке
                        Ответить
      • "писать goto не кошерно" как бы вы это переписали ?
        замечу тут даже флажок не воткнуть смотрите linux/list.h
        разбивать на функции чтоб спрятать goto маразм ну и как ?
        да никак городили бы или do {} while или выеросили бы циклы
        в функции что только ухудшило бы понимание кода
        понабегут теоретики и кричат goto плохо
        static VOID CheckUnique(list_head *liblist, list_head *apilist)
        {
        again_scan:
        	apiitem *apiel;
        	list_for_each_entry(apiel, apilist, link)
        	{
        		libitem *libel;
        		list_for_each_entry(libel, liblist, link)
        		{
        			apiitem *apiuniqel;
        			list_for_each_entry(apiuniqel, &libel->apilist, link)
        			{
        				if (!strcmp(apiuniqel->szApi, apiel->szApi))
        				{
        
        					list_del(&apiel->link);
        					free(apiel);
        					goto again_scan;
        				}
        			}
        		}
        	}
        }
        Ответить
        • "писать goto не кошерно" как бы вы это переписали ?
          замечу тут даже флажок не воткнуть смотрите linux/list.h
          разбивать на функции чтоб спрятать goto это маразм ну дак как ?
          да никак городили бы или do {} while или вынесли бы циклы
          в функции что только ухудшило бы понимание кода
          понабегут теоретики и кричат goto плохо мудаки вы а не программисты
          все те кто против goto
          static VOID CheckUnique(list_head *liblist, list_head *apilist)
          {
          again_scan:
          	apiitem *apiel;
          	list_for_each_entry(apiel, apilist, link)
          	{
          		libitem *libel;
          		list_for_each_entry(libel, liblist, link)
          		{
          			apiitem *apiuniqel;
          			list_for_each_entry(apiuniqel, &libel->apilist, link)
          			{
          				if (!strcmp(apiuniqel->szApi, apiel->szApi))
          				{
          
          					list_del(&apiel->link);
          					free(apiel);
          					goto again_scan;
          				}
          			}
          		}
          	}
          }
          Ответить
          • more drama!
            и да
            где тут С++, %username%?
            Ответить
          • ждем говнорешение от гождем говнорешение от говнопрограммистов без goto предыдущего примера
            пусть уже наконец все убедятся что те кто орут goto плохо всего
            лиш теоретики а я вам скажу что они предложат вынести циклы в функции
            потому что эти типотенты считают себя мега крутыми когда делают все
            только хуже лиш бы спрятать goto у них комлекс с детства какой то
            с психикой связанный не с проста они везде стараются спрятать
            goto в даже ущерб читаемостивнопрограммистов без goto
            Ответить
            • ждем говнорешение от говнопрограммистов без goto предыдущего примера
              пусть уже наконец все убедятся что те кто орут goto плохо всего
              лиш теоретики а я вам скажу что они предложат вынести циклы в функции
              потому что эти типотенты считают себя мега крутыми когда делают все
              только хуже лиш бы спрятать goto у них комлекс с детства какой то
              с психикой связанный не с проста они везде стараются спрятать
              goto в даже ущерб читаемости
              Ответить
              • ждем говнорешение от говнопрограммистов без goto предыдущего примера
                пусть уже наконец все убедятся что те кто орут goto плохо всего
                лиш теоретики а я вам скажу что они предложат вынести циклы в функции
                потому что эти импотенты считают себя мега крутыми когда делают все
                только хуже лиш бы спрятать goto у них комлекс с детства какой то
                с психикой связанный не с проста они везде стараются спрятать
                goto в даже ущерб читаемости
                Ответить
                • бля это угар
                  Ответить
                  • по-моему, это самый настоящий
                    http://images.encyclopediadramatica.ch/0/0a/Bawwwww_bunny.jpg
                    Ответить
                • CPPGovno он же dosGovno, LinuxGovno, WindowsGovno,
                  C_Krest_Krest_Govno он же openclgovno - залогинься.
                  Ответить
                • ПАЦАНЫ, Я СЕГОДНЯ ШЁЛ КОРОЧЕ ПО ГОВНОКОДУ И УВИДЕЛ БЫДЛОКОДЕРА В МАЙКЕ "ЦИКЛЫ И УСЛОВНЫЕ ПЕРЕХОДЫ", НУ Я ПОДСКОЧИЛ И РЕЗКО ПЕРЕЕБАЛ ЕМУ В ЩЩИ С ВЕРТУШКИ И ПОЯСНИЛ ЕГО КРИКОМ "НЕ ЛЮБЛЮ ОПЕРАЦИИ СРАВНЕНИЯ", ПОТОМУ ЧТО Я УГОРЕЛ ПО GOTO, ПАЦАНЫ ДУХ СТАРОЙ ШКОЛЫ ЖИВЁТ ТОЛЬКО В ЛИНАКСЕ, ГДЕ ЕБАШАТСЯ ПО ХАРДКОРУ, ГДЕ ИДЕОЛОГИЧЕСКИЕ ДЕВСТВЕННИКИ ЖИВУТ ЕМЁРДЖЕМ, ГЦЦ И ЕБУТ ЭКСЕПШЕНЫ В РОТ! ТОЛЬКО LINUX/LIST.H, ТОЛЬКО ХАРДКОР!!! ЮНИТИ УЛЬТРАХАРДКОР РЭД-АЙ ЛИНУКС!!! пацаны ебашьте джавотварей, шарперов, крестоблядей, питонопидарасню, угорайте на ИРЦ, любите свою Операционную Систему, пацанов и Линуса! ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО! GOTO!
                  Ответить
                • показать все, что скрытоПоясните мысль.
                  Ответить
        • поясню свое мнение по этому вопросу:
          писать goto считают не кошерным, а по другому не умеют - вот и заменили бряками.
          как я бы написал... не знаю: зависит от обработчика ERR_OK.
          в Вашем примере goto вполне уместен.
          PS. я не теоретик:)
          Ответить
          • >PS. я не теоретик:)
            вы теораст!
            Ответить
          • #include <stdio.h>
            int main() {
            int i = 0;
            nach:
            i = i + 1;
            if(i <= 10) goto pech;
            if(i > 10) goto konets;
            konets:
            printf("Konets programmi.");
            return 0;
            pech:
            printf("%d v kvadrate = %d\n", i, i * i);
            goto nach;
            }

            лучшее - враг хорошего... в общем, нет понту обсирать единоразовое использование goto в условиях безысходности. Как говорится, один раз - не пидараз... Истинное же мясо, порубленное вместе с будкой и цепью начинается тогда, когда бейсиковый стиль применяестя без разрения совести для написания всего вообще кода. Как пример, см. приведенный выше шматок.
            Ответить
    • #define BREAK_IF_ERROR(r) if (r != ERR_OK) break;

      do {
      ::Packet * pPacket;
      res = ReadPacket(pPacket);
      BREAK_IF_ERROR(res);
      res = pConstructor->PutPacket(pPacket);
      BREAK_IF_ERROR(res);
      res = pConstructor->GetFrame(data);
      BREAK_IF_ERROR(res);
      } while(0);
      // analyze res here
      Ответить
    • Да, это старое извращение. Вместо goto или return.
      Ответить
      • Ну break; же всяко быстрее пишется, чем goto KUDA_TO_TAM;
        Правда, здесь это компенсировали дефайном...
        Ответить
    • openclgovno, defecate-plusplus
      Нечего меня форсить. Я давно ушел. Комунити, к этим людям я не имею ни какого отношения. (:
      Вечно ваш CPPGovno, C_Krest_Krest_Govno, dosGovno, LinuxGovno, WindowsGovno. Пока. (:


      openclgovno, ты считаешь DirectCompute11 лучше, чем OpenCL?
      Только не говори AMD FireStream и NVIDIA CUDA, ибо это не кроссаппаратные технологии другого класса.
      Ответить
      • opencl относительно новая технология, а все новое должно пройти проверку. Пока же я вижу что стандарт как бы уже давно есть, но детали отличаются у производителей железа. За примерами дальше интела и нвидии ходить не надо.
        Ответить
        • Советую посмотреть ещё на C++ AMP.
          Использование GPU, как сопроцессора - это весьма перспективная идея. Ждем стандартизации этого комитетом С++ и реализацию под GCC. ^_^
          Ответить
        • Планируется отправить спецификацию C++ AMP организации по стандартизации, чтобы технология стала “открытой спецификацией”, которую мог реализовать любой компилятор. В планах сделать эту технологию доступной на компиляторах для любых платформ.
          Ответить
      • во-первых, кем бы ты не был - ты мудак.
        во-вторых - это копипаст с моего поста, где я не упомянул о macGovno.
        Ответить
        • >ты мудак.
          во-первых, это намекает нам на твой уровень. (:

          во-вторых - это копипаст с твоего поста, ибо мне лень набирать вручную эту стену, но заметь перестановку твоих слов.
          Ответить
        • Кстати, давненько я не гуглил мудаков:
          http://1658187.33b.ru/

          Подпись пользователя доставляет (:
          Ответить
          • человек умеет иронизировать над собой, чё = )
            Ответить
            • Банально выписал диагноз из медкарты, больше ничего умней придумать просто не смог. Пришлось копипастить. (:
              Ответить
              • не надо придумывать оправдания, просто вот тебе было бы слабО сиронизировать над собой, не прячась в анонимусы = )
                Ответить
                • Между прочим я не прячусь. Меня просто никто не ищет и меня это устраивает. (:
                  Ответить
        • Между тем, у тебя по делу вообще ни одного слова. Ты способен лишь сраться с другими. Это твой интеллектуальный придел. Ты нигде не добьёшся успеха, в отличии от openclgovno. Мне тебя жаль. (:
          Ответить
          • >интеллектуальный придел
            вы еще приделами померяйтесь
            Ответить
            • Здесь иронично придел (от приделать), тк мозг то приделать бы не помешало. (:
              Ответить
              • идиот, придел это модуль расширения кафедрала, позволяющий увеличить генерацию маны на 50%
                Ответить
                • Странно, я всю жизнь думал, что
                  http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B4%D0%B5%D0%BB
                  Ответить
                  • это православный кафедрал, там мана не генерируется, а продают сигареты
                    Ответить
                    • >православный кафедрал, там мана не генерируется
                      КРЕСТОПРОБЛЕМЫ
                      Ответить
          • >Ты способен лишь сраться с другими.
            Ты здесь недавно?

            >Это твой интеллектуальный придел.
            >Ты нигде не добьёшся успеха, в отличии от openclgovno.
            >Мне тебя жаль. (:
            золотые слова.
            Ответить
      • Фу.
        Ответить
    • что общее между преступниками и мудаками? они возвращаются
      Ответить
      • Доказать: между преступниками и мудаками есть что-то общее.
        Не все преступники = мудаки.
        Не все мудаки = преступники.
        Не все = не все.
        Доказано.
        Ответить

    Добавить комментарий