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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    void NewTorrent_PeersListViewCtrl::OnAttach()
    {	
    	WTL::CMenuHandle menu;
    	BOOL menu_created = menu.LoadMenu(HAL_GENERIC_ADD_LV_MENU);
    	InitialSetup(menu);	
    // ...
    	for (int i=0, e=3; i < e; ++i)
    	{
    		AddColumn(names[i].c_str(), i, visible[i], widths[i]);
    	}	
    // ...
    }

    Седьмая строка в этом огрызке вызывает сомнения.

    Запостил: emanon, 10 Мая 2016

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

    • Какие?
      Ответить
      • Еблю которую нельзя увидеть, но можно услышать.
        Пользуюсь случаем Передаю соседям привет
        Ответить
      • Смутные.
        Не понятно зачем здесь используется переменная 'e' в условии выхода из цикла, когда вместо неё можно использовать константное число.
        Ответить
        • Здесь используется e из скоупа функции, а не объявляется новая. Возможно, где-то ниже она потом используется. Хотя, конечно, засирание for'а - говно.
          Ответить
          • Вообще-то нет, тут одним оператором объявляется сразу две переменные.

            Я думаю что парадигма for(int i=0; e=length) так въелась автор в мозг что он даже с константами так делает, для единообразия. Да даже по преинкременту сразу видно - упоротый.
            Ответить
            • Что не так с преинкрементом? Обоснуй!
              Ответить

              • Он быстрее. Не знал чтоли?


                int& inc1(int &a) {
                   a = a + 1;
                   return a;
                }
                
                int& inc2(int &a) {
                   int tmp = a;// дополнительная память!!!
                   a = a + 1;
                   return tmp;
                }
                Ответить
                • ++i - хуйня
                  i++ - тру
                  Ответить
                  • Так а я про что?
                    Ответить
                  • Наоборот. Хотя бы потому, что ++i возвращает очевидный результат.
                    Ответить
                    • Ты на каком языке пишешь в основном?
                      Ответить
                      • Сейчас на JS.
                        В JS не надо думать. В частности - о точках следования, поэтому в сложных выражениях легче бездумно вставить присваивание, в частности - ++i, не беспокоясь, что эта фигня вернёт зачем-то предыдущее значение.
                        Ответить
                        • Вот и не пезди. В JS незя писать ++i

                          И вообще, я имел в виду
                          for(i=0;i<n;i++) против for(i=0;i<n;++i)

                          Второй вариант - говно.
                          Ответить
                          • Как минимум, в ECMAScript 2015 можно (см. ECMA-262 6th edition 12.5.7, 12.5.8 - страница 165). Конечно, и до 2015 можно было.

                            В циклах никакого преимущества ни i++, ни ++i не даёт, поэтому можно использовать для унификации тот вариант, который уместнее (судя по всему, по субъективным причинам) в остальных выражениях.
                            Ответить
            • Ой-вей, таки в глаза ебусь.

              А вопрос про преинкременты удваиваю.
              Ответить
    • другой поток ищет e на стеке и меняет, очевидно же
      Ответить
      • Кто сказал, что она на стеке?
        Ответить
        • Автоматическая переменная же. Где она ещё может быть?

          Или e - это макрос?
          Ответить
          • А конпелятор разве не может соптимизировать и поместить её в регистр?
            Ответить
          • В C90 было такое хорошее правило -все декларации находятся в начале блока.
            Кстати, венгерка бы позволила избежать таких вопросов, однако она почему-то остаётся чем-то плохим.
            Ответить
    • А может автор просто хотел "хуй" написать?
      e=3
      Ответить

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