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

    +58

    1. 1
    #define CHK( x ) {do{if (x == MBRES_ERR){goto __gotoFAIL;}} while (FALSE);}

    Из SDK корейского сканера

    Запостил: snw, 08 Августа 2014

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

    • Полное непонимание зачем нужен и как делать do .. while(0) в макросах.

      Использование FALSE вместо false в крестах тоже радует.
      Ответить
      • А ещё goto в макросе, да к тому же в крестах...
        Ответить
        • > крестах
          Да не кресты это. Это C/C++ (когда автор пишет на крестах как на си).
          Ответить
          • > C/C++ (когда автор пишет на крестах как на си)
            Самое отвратительное сочетание
            Ответить
            • А с Objective C, значит, лучше?
              Ответить
              • почему?
                Ответить
                • Потому что у C с C++ самое отвратительное сочетание.
                  Ответить
                  • Там свои сорта говна, в том мире уже нет понятие хуже - лучше. Там скорее пожухлое - свежее, бурое - серое
                    Ответить
            • О ужас, ну тогда любая прикладная прога говно, API то что у Винды, что у Линупса, шо у Юникса сишный. И если ты решил что-то написать на них под С++ - то пиздравляю. Вроде как у макоси есть обьекто ориентированый API, но печенью чую что просто прослойка над сишним ядром UNIX.
              Ответить
              • > И если ты решил что-то написать на них под С++ - то пиздравляю.

                Нет никаких проблем реализовать полноценную C++-обёртку (читай - с поддержкой RAII) над сишным апи и спокойно писать прикладуху на идеоматичном C++.

                Я просто насмотрелся на проги, которые используют сырые низкоуровневые ресурсы и malloc/free/new/delete вперемешку с исключенями и goto. Это леденящий душу 3.14здец.
                Ответить
                • фу какой у тебя грубый 3.14159265здец
                  Ответить
                • >>>malloc/free
                  А какой в них смысл если доступны new/delete? Я бы вообще в свежий стандарт
                  чистого Си (если он выходит сейчас) бы перенес их вместе с пространствами имен и каким-то простейшим полиморфизмом для сишных функций.
                  Ответить
                  • > А какой в них смысл если доступны new/delete
                    К примеру, если какой-то сишной либе нужно отдать указатель, который она потом освободит через free. Ну или наоборот - либа возвращает malloc'нутый указатель, который мне нужно будет освободить через free.
                    Ответить
          • ака Си с классами
            Ответить
            • и с исключениями
              Ответить
              • и с goto
                Ответить
                • void foo() {
                      try { operation1(); } catch (...) { goto cleanup; }
                      try { operation2(); } catch (...) { goto cleanup; }
                      // ...
                  cleanup:
                      // ...
                  }
                  Ответить
              • "Я запилю свой си! С классами! И исключениями!" Сказал как то мертвый страус и понеслось....
                Ответить
                • Нет, он просто дал эту гениальную вещь макакам, которые с ней обращаться-то не умеют.
                  Ответить
                  • гениальную? и в чем гениальность плюсов?
                    Ответить
                    • В том, что валидность кода может зависеть от значения константы.
                      Ответить
                      • вспомнил бородатое


                        Известны 10 преимуществ Паскаля перед Си
                        Я приведу только одно, но самое важное.
                        На Си вы можете написать:
                        for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2);
                        На Паскале Вы НЕ МОЖЕТЕ такого написать
                        Ответить
                        • > 3DC
                          что это?
                          Ответить
                          • я хз, просто скопипастил. видимо без С просто тройка даблов
                            Ответить
                          • for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

                            нашел православный вариант
                            Ответить
                            • Этому коду не хватает определений P и R.
                              Ответить
                              • Для стиля K&R пойдёт и без определения P (подразумевается int P(int), что само по себе говно, но работает). Нужно только определить переменные C, u, R, e.
                                Ответить
                    • В том что он находится на стыке двух миров - мира процессорных инструкций и мира высокоуровневых языков. Чтоб хорошо писать на Си нужно с одной сторы иметь хотябы примерное предствление как твой код превращается в процессорные инструкции, а с другой тебе вовсе не нужно писать на громостком ассеблере.
                      Ответить
                      • Это гениальность С. А в чем гениальность плюсов?)
                        Ответить
                        • Все тоже самое, но естьООП (но его считают некоторые личности эрзацем) и еще пачка современных ништячков.
                          Ответить
                          • Это не делает его гениальным

                            А С с ООП так и вообще смотрится адово
                            Ответить
                    • Мощнейшая система изнасилования типом в компалтайме.

                      Что дает сочетание максимального быстродействия рантайма, экономичности и безопасности.
                      Ответить
                    • > в чем гениальность плюсов?

                      1. Универсальный механизм управления ресурсами - объекты + идиома RAII.
                      2. Встроенный функциональный язык для метапрограммирования с паттерн-матчингом - шаблоны. Если подсел на шаблоны, мир уже никогда больше не станет прежним.
                      3. Возможность выбрать стиль программирования, наиболее подходящий к задаче - процедурный, ООП, функциональщина, метапрограммирование. Можно сочетать.
                      4. Возможность напрямую дёргать системные вызовы и низкоуровневые сишные апи, не дожидаясь, пока их красиво обернут в популярной платформе. Особенно полезно в сочетании с пунктом 1.
                      5. Нет пауз gc. Возможность работы в условиях real-time.
                      6. Быстрый старт приложений.
                      Ответить
                      • 1 благодаря чему программы текут как сучки
                        2 А потом начинается шаблоноблядство - вообще хуй че прочитаешь
                        3 лучше иметь кошерный набор инструментов, чем один, который может все, в том числе и стрелять тебе по ногам, сношать тебя анально и течь
                        4 в резулятате чего ось ложиться на лопатки - ибо дергается за яйца без какой либо защиты (зато быстро)
                        5. По дефолту нет. А вообще можно подцепить

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

                        Почему я ненавижу язык. люто, бегшено? - потому что во всех вузах (кроме ТГУ ибо у нах пох на чем сдавать) и полувузах его преподают как основной язык. Человек не знает что такое граф - но его уже садят на крестоблядскую машину. Это прискорбно
                        Ответить
                        • > благодаря чему программы текут как сучки
                          Только у неосиляторов, которые все еще освобождают память вручную.

                          У меня в небольшом проектике было одно delete на 90+ классов, и то просто лень было выпиливать... И ничего не текло, да. А с move семантикой можно еще и кучу new убрать...

                          > преподают как основной язык
                          Уверен? Вроде в вузах преподают C/C++ (аля си с классами). И это прискорбно, да. Как раз из-за такого обучения проги у нубов текут как сучки...
                          Ответить
                          • хуй знает, чем им преподают, но они бегают и кричат - мне нужна крестобала! мне нужна крестобала!
                            Ответить
                        • Ты неправ.
                          Ответить
                        • > в резулятате чего ось ложиться на лопатки
                          Если прога может взять и положить ось на лопатки - значит это была хуёвая ось (или просто ты купил мало оперативки и она упала в своп).

                          > дергается за яйца без какой либо защиты
                          Ты под досом что-ли работаешь? :)
                          Ответить
                          • А знаете... Дуракам везёт. Особенно - на баги в осях.
                            Ответить
                            • У меня был битый ico файл, который ронял XP в BSOD, если его открыть в irfan view...

                              А баги в ядре и дровах они ведь на любые языки одинаково влияют. Сишка/кресты тут на равных со всеми остальными.
                              Ответить
                            • Ещё реализация Biff8 в Office 2003 очень хорошо ложит ось на лопатки.
                              Там букет разнообразных ароматов достигается уже после 2-3 недель реверсирования...
                              Ответить
                          • >значит это была хуёвая ось
                            Либо стало слишком много фиговых писателей...
                            Ответить

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