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

    +20

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    // заполнение массива случайными числами
    template <typename T> void fill_array_with_random( T array[], size_t length ) {
    	for ( size_t i = 0; i < length; i++ ) { 
    		array[i] = rand();
    	}
    }

    Главный недостаток - K&R indent style.

    Запостил: Fai, 26 Июня 2012

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

    • Толсто конечно, зато внимание привлекает.
      Ответить
    • > K&R indent style
      Начинаем индентосрач?

      А еще там лишние пробелы после ( и перед ).
      Ответить
    • Хрень из пальца на ровном месте.
      Разве что-то обязывает использовать в плюсах IS K&R?
      Особенно при работе с шаблонами.
      Как на меня, удобней всего IS Алмена либо IS Linux Kernel.
      Ответить
      • Так вроде IS Linux Kernel отличается от IS K&R только табами в 8 пробелов...
        Ответить
        • Не только. Например:
          K&R
          if () {
          /* one statement*/
          } else {
          /* one statement*/
          }
          LK:
          if ()
          /* one statement*/
          else
          /* one statement*/
          Ответить
          • отсутствие фигурных скобочек?
            Ответить
            • Грэг К.Х.: Прислал патч для ядра не соответствующий LKIS — Давай, до свиданья!
              Ответить
              • А в чём таки разница?
                Ответить
                • Не морочьте мне мозги.
                  Не соответствие установленным правилам влечёт за собой отклонение кода — там никто не будет разбираться, желающих пропатчить ядро туева хуча.
                  Ответить
                  • Вы специально отвечаете не на мой вопрос?
                    Чем отличается стиль K&R от стиля LR?
                    Ответить
                    • >Чем отличается стиль K&R от стиля LR?
                      LR->LK, надо полагать.
                      В незначительных деталях не соблюдение которых многое значит.
                      Ответить
                      • Можно примеры этих деталей?
                        Ответить
                        • >>The biggest difference between K&R and the One True Brace Style (1TBS) is that in the 1TBS, all if, else, while, and for statements have opening and closing braces, even if they aren't necessary. The purpose is to make it easy to insert new statements and know exactly how they will be grouped.

                          Особенность в том, что для LKIS K&R and 1TBS not the same.
                          т. е. LKIS не использует single statement opening and closing braces, for all if, else, while, and for. Это первое, и как уже заметили для LKIS tab=8*space - necessary, а для K&R не догма,
                          обычно 4-ку спейсами ставят.

                          И да, по причине не соблюдение этих 'незначительных деталей', патч могут не принять.
                          Ответить
                          • Предполагаю, что у него (Грег К.Х. ) на автомате парсится почта скриптом и при не соответствии LKIS, отсылается стандартное уведомление. Он даже не мается это фигнёй, у него потолок под 70 патчей за день был, в среднем 30-50, вроде как.
                            Ответить
                          • По-русски если, то LK не ставит фигурные скобочки, если выражение одно, а KR зачем-то ставит?
                            И в LK таб равен 8 пробелам а отступ делается одним табом, а в KR пох какой таб, отступы делаются пробелами?
                            Ответить
                            • Да, все верно.
                              http://www.kernel.org/doc/Documentation/CodingStyle

                              Только, в добавок, у функций скобки ставятся по allman'овски.
                              Ответить
                              • Отступ в 1 таб из 8 пробелов это пиздец.
                                Отступ, набранный пробелми это пиздец.
                                Скобки по аллмановски - это
                                int main(){
                                return 0;
                                };
                                ?
                                Ответить
                                • > Отступ в 1 таб из 8 пробелов это пиздец.
                                  В kernel пишут, что отступ в 1 таб, который настроен на 8 пробелов, при этом отмечено что это не 8 пробелов, а именно таб. Причина - чтобы не писали больше 2-3 вложенных конструкций.

                                  > Скобки по аллмановски
                                  int main()
                                  {
                                  }
                                  Ответить
                                  • А не-по оллмановски - это как я написал?
                                    2-3 вложенные конструкции это пиздец. Даже кусорт не написать.
                                    Ответить
                                  • Причина такого широкого отступа кстати очень хорошая.
                                    Ответить
                                • > Отступ, набранный пробелми это пиздец.
                                  Не знаю, привык к отступу в 4 пробела. Пиздец это когда табы смешаны с пробелами. Вот тогда это нечитабельное говно.
                                  Ответить
                                • >> Скобки по аллмановски - это...
                                  Так это как раз K&R. И по K&R нет соглашения по-поводу того как ставить отступ и какой он должен быть.
                                  Ответить
                                • > };
                                  why so sad?
                                  Ответить
                            • >> Скобки по аллмановски - это...
                              В K&R IS скобки для одиночных операторов ставятся не зачем-то, а чтобы не допустить ошибку при изменении кода.
                              Ответить
                              • На самом деле если запретить писать оператор на той же строке что и if/for/while, а всегда писать его на следующей строке с отступом (как в linux kernel), то этой проблемы нет даже без скобок.
                                Ответить
                          • Вы замечаете, что говорите на двух языках одновременно?
                            Ответить
                            • "Он постоянно думает на языках,продолжения которых не знает."
                              Ответить
                            • "— Владимир Николаевич, у тебя дома жена, сын-двоечник, за кооперативную квартиру не заплачено. А ты тут мозги пудришь… Плохо кончится, родной…"(с)
                              Ответить
                              • Маймуно верешвилло.
                                — Владимир Николаевич, они и грузинский знают!
                                — Что он сказал?
                                — Обезьяна, сын осла.
                                Ответить
                • Дабы не превращать ядро в помойку с разными стилями в разных местах.
                  Ответить
            • i++ в цикле for!
              Повесить и застрелить! Но сначала сбрить хлипкую барадёнку.
              Ответить
              • Вы серьезно думаете, что ++i быстрее? Или имелась в виду необходимость использования итераторов?
                Ответить
                • мсье уверен, что быстрее, ведь не нужна дополнительная инструкция, сохраняющая предыдущее значение переменной. Только вот, думается, оптимизатор сможет преобразовать i++ в ++i там, где старое значение не используется.
                  Ответить
                • Если по-совести, то это зависит от компилятора. В таких простых случаях, скорее всего, компилятор понимает, что программист допустил ошибку, так как само значение i не используется в момент увеличения. Если бы компилятор этого не делал, то мы бы имели постоянное создание временного объекта. А это уже фуууу... Как в носу ковыряться на виду у всех.

                  А про итераторы тут же речи не идёт, контейнеров то нет.
                  Ответить
                  • Ну такие "оптимизации" должен уметь проделывать каждый уважающий себя компилятор.

                    Проблемы могут возникнуть только если у i достаточно сложный оператор ++, который компилятор не сможет заинлайнить.
                    Ответить
                    • Думаю, что если программист смог написать сложный оператор ++, то он и в for i++ писать не будет. Обыкновенно это очень воспитанные программисты.
                      Ответить
                • while(i<length)
                  a[i++] = rand();

                  если уж i++ хочется.
                  Ответить
                  • Лучше уж "медленный" for в этом случае.
                    А вообще тут самое место для range-based-for из C++11.
                    Ответить
                    • У нас с тобой слишком разные взгляды на то, что позорит имя волшебника, Люциус.
                      Ответить
                • i++ часто не оптимизируется в Debug сборках. Те же тесты могут на 10-15% дольше выполняться, т.к. узкие места как раз в циклах бывают. Копеечная экономия, конечно, но лучше сразу писать хорошо, типа
                  for (counter = start; counter != end; ++counter) {
                    /* stuff */
                  }
                  Ответить
    • std::generate
      Ответить
    • показать все, что скрытотест
      Ответить
    • Срач то удался, жаль в минус ушло.
      Ответить
      • Не расстраивайтесь, в вашей жизни ещё будет много говна и срачей.
        Ответить
    • Пи$дец какой-то, товарищи. У моего акка отклеился гугловский openid. Хорошо хоть ещё другой прикреплён.
      Ответить
      • интересно, много ли челов тут его приклеивали? лично я вхожу через майл\пасс
        Ответить
        • >интересно, много ли челов тут его приклеивали?

          select сделать не долго
          Ответить

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