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

    +161

    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 ADD_GRAPH(gid,gmod) m_Registry[TGraphId(gid,gmod)] = new
    /// ...хде-то по её середине...
    #define ADD_MAP_WEAPON_OVERLAY(name_base,file_name)\
      for (i=0; i<8; i++)\
      {\
        ADD_GRAPH(name_base _T("S"),i) (CLoadImage (\
          file_name,\
          TImageFX ()\
          .SetColorReplacementFX (g_WeaponRecolor[i],2,0)\
          ));\
        ADD_GRAPH(name_base _T("Q"),i) (CLoadImage (\
          file_name,\
          TImageFX ()\
          .SetColorReplacementFX (g_WeaponRecolor[i],2,1)\
          ));\
      }
    #define ADD_MAP_WEAPON_OUTLINE(name_base,file_name)\
      ADD_GRAPH(name_base _T("C"),0) (CLoadImage (\
          file_name,\
          TImageFX ()\
          .SetColorReplacementFX (g_WeaponRecolor[0],2,2)\
          ));
    
    ADD_MAP_WEAPON_OVERLAY (_T("CellSword"),_T("cell_weap_sword.png"));
    ADD_MAP_WEAPON_OVERLAY (_T("CellAxe"),_T("cell_weap_axe.png"));
    ADD_MAP_WEAPON_OVERLAY (_T("CellEshock"),_T("cell_weap_eshock.png"));
    ADD_MAP_WEAPON_OVERLAY (_T("CellLance"),_T("cell_weap_lance.png"));
    //... тут очень много в таком же духе ...
    ADD_MAP_WEAPON_OUTLINE (_T("CellXbow"),_T("cell_weap_xbow.png"));
    ADD_MAP_WEAPON_OUTLINE (_T("CellRifle"),_T("cell_weap_rifle.png"));
    ADD_MAP_WEAPON_OUTLINE (_T("CellPistol"),_T("cell_weap_pistol.png"));

    >Как бы оно выглядело без макросов, предоставляю гадать желающим.
    Эстеты, разумеется, могут возопить: "Пошто было не вынести всё это в функцию?!" Пото, что функцию (а она потребовалась бы методом) пришлось бы описывать в хедере вместе с классом + имплементировать где-то снаружи текущей функции - весёлое занятие, нечего сказать. Это при том, что данный конкретный кусок кода на момент написания сильномутабелен в плане кол-ва требующихся параметров, и в перспективе мог вообще исчезнуть/слиться с другим. И таких кусков там ~100500. Возможностей, с которыми использование функций для подобного действа не является злобным буратинством, в моём местном С++ пока не наличенствует. А так все релевантные к специфике данного куска пиписьки сконцентрированы в одном месте, умещаются на 1 экран, и я спокоен за возвращение к нему через много времени.

    CPPGovno, 21 Августа 2011

    Комментарии (10)
  2. C++ / Говнокод #7607

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    #include<thread>
        	void f();
    	struct F {
    		void operator()();
    	};
    
    	int main()
    	{
    		std::thread t1{f};	// f() executes in separate thread
    		std::thread t2{F()};	// F()() executes in separate thread
    	}

    Фигурные скобочки t1{f}; , используемые где только можно не перестают доставлять.
    http://www2.research.att.com/~bs/C++0xFAQ.html

    Говногость, 21 Августа 2011

    Комментарии (17)
  3. C++ / Говнокод #7604

    +152

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    int main()
    {
      unsigned long l = 0xffc00000;
      float f1,f2;
      memcpy(&f1,&l,4);
      memcpy(&f2,&l,4);
      if(f1!=f2)printf("OH, SHI~!\n");
      if(f1!=f1)printf("Facepalm!\n");
    }

    >Давно хотел провести эксперимент, вот только сейчас руки дошли.
    Лог программы:
    OH, SHI~!
    Facepalm!

    >Кто-нибудь знает причину подобного феномена?
    Эксперемент не мой и я знаю причину такого поведения. Так что не плохой вопрос для собеседования к новичкам.

    Говногость, 21 Августа 2011

    Комментарии (15)
  4. C++ / Говнокод #7603

    +165

    1. 1
    log::write(std::string() + "Opened \"" + filename + "\"");

    История не моя, но приложу её к коду:
    >Несколько лет назад у нас в проекте была такая строчка кода
    Функция log::write() принимала форматную строку и набор аргументов, как printf.
    Если имя файла содержит %, возможны неприятности, но такие файлы обычно не встречаются.
    Я когда это увидел, очень резко прокоментировал способности и интелектуальный уровень того, кто так написал.
    Как же так, если файл называется скажем "%s", программа грохнется с вероятностью близкой к 100%!

    Как оказалось, этот кусок кода писала жена начальника.
    Морские свинки и программистки, ага.
    Кажется она сильно обиделась, меня уволили.

    Говногость, 21 Августа 2011

    Комментарии (19)
  5. C++ / Говнокод #7601

    +178

    1. 1
    #define float double

    Так в последнем, полученном мною, для поддержки проекте произвели увеличение точности расчётов.

    Говногость, 20 Августа 2011

    Комментарии (8)
  6. C++ / Говнокод #7600

    +164

    1. 1
    for(int i(0); i<5; i++)

    Мне интересно, кто-нибудь так же пишет?

    Говногость, 20 Августа 2011

    Комментарии (10)
  7. C++ / Говнокод #7599

    +158

    1. 1
    2. 2
    3. 3
    typedef int IntHack;
    const intHack operator+(const intHack, const intHack)
    {

    Счастливой отладки. ^_^

    Говногость, 20 Августа 2011

    Комментарии (11)
  8. C++ / Говнокод #7598

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    struct Matrix
    {
        float c[4][4];
    
        float (&operator[](int idx))[4] {
            return c[idx];
        }
    };

    Говногость, 20 Августа 2011

    Комментарии (12)
  9. C++ / Говнокод #7595

    +163

    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
    struct TPlaylist
    {
    	bool shuffle;
    	bool loop;
    //...........................................
    
    typedef map<TString, TPlaylist>	TPlaylistsdMap;
    //............................................
    	
    bool StartPlay(const TString& playlistID, int shuffle = false, int loop = false....
    {
    	TPlaylistsdMap::iterator iter = mPlaylists.find(playlistID);
    	if (iter != mPlaylists.end())
    	{
    		if (shuffle != -1) iter->second.shuffle = shuffle;
    		if (loop != -1) iter->second.loop = loop;
    //.............................................

    туда-сюда-обратно...

    bobok, 20 Августа 2011

    Комментарии (0)
  10. C++ / Говнокод #7581

    +147

    1. 1
    2. 2
    3. 3
    4. 4
    class PieceDragging
    {
    ...
    };

    Переделываю всё тот же (недавно упоминавшийся) Jigsaw. Попытался произнести вслух название класса одного из состояний. Коллеги оценили. Придётся рефакторить...

    Kirinyale, 18 Августа 2011

    Комментарии (4)