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

    +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
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    // Часть первая. Объявления. Exceptions.hpp
    
    template <typename E>
    struct ExeptionKeeper 
    {
        E * exptn;
        ExeptionKeeper(E * ex) 
        {
            exptn = ex;
        }
        ~ExeptionKeeper()
        {
            if(exptn != NULL )
            {
                delete exptn;
            }
        }
        E * operator -> () 
        { 
            return exptn; 
        }
    };
    
    #define EX_TRY(XX) try { XX }
    #define EX_CATCH(TT, NAME, XX) catch (TT *_ex) { ExeptionKeeper<TT> NAME(_ex);  XX }
    
    /// Часть вторая. Использование. ModelsHelper.cpp
    
    .... // код
            EX_TRY
            (
               ............
                 TestParams(args); // кидает new ParamsException в случае неудачи
               ............
                 TestFunctions(funclist); // Кидает new FuncsException ... 
               ............
               //// тут еще есть вызовы, кидающие исключения
               ............
            ) 
            EX_CATCH
            (   ParamsException, exp,
                GLogger(levelerror).Log("Invalid params for model ", exp->model(), " [", exp->paramlist().str(), "]");
            ) 
            EX_CATCH
            (   FuncsException, exp,
                GLogger(levelerror).Log("Invalid functions for model ", exp->model(), " [", exp->funclist().str(), "]");
            ) 
            EX_CATCH
            (   LevelsException, exp,
                GLogger(levelerror).Log("Invalid levels for model ", exp->model(), " [", exp->levelslist().str(), "]");           
            ) 
            EX_CATCH
            (    .... , exp,
                ........
            )
    .... // код

    И снова на тему исключений.
    Прислал приятель. Какой-то софт для аэропортов.
    Комменты на русском мои.

    ossa, 09 Февраля 2011

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

    +154

    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
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    //построение суффиксного массива
    vector <int> getarr(string s) 
    {
      //s - исходная строка
      //суффиксный массив
      vector <int> arr;
      arr.resize(s.size());
      //массив цветов
      vector <int> col;
      col.resize(s.size());
      //массив для временных данных
      vector <int> buf;
      buf.resize(s.size());
      //массив для карманов сортировки
      vector <int> buck;
      buck.resize(max(L, (int) s.size()));
      //Шаг первый - начальная сортировка
      //мы хотим отсортировать буквы строки
      //посчитаем количество всех букв
      for (int i = 0; i < (int) s.size(); i++) 
        buck[s[i]]++;
      //преобразуем массив так, чтобы каждый элемент указывал на положение в массиве первой данной буквы
      int sum = 0; 
      for (int i = 0; i < L; i++) 
      {
        sum += buck[i];
    	buck[i] = sum - buck[i];
      }
      //теперь заполним массив arr: Теперь в нем суффиксы отсортированы по первой букве
      for (int i = 0; i < (int) s.size(); i++) 
        arr[buck[s[i]]++] = i;
      //теперь проставляем цвета: цвет увеличивается на 1 если следующая буква - другая
      col[arr[0]] = 0; 
      for (int i = 1; i < (int) s.size(); i++) 
        col[arr[i]] = col[arr[i-1]] + (s[arr[i]] != s[arr[i-1]]); 
      int cn = col[arr[s.size() - 1]] + 1;
      //Шаг второй - постепенное расширение подстрок
      //в начале цикла отсортированы подстроки длины l, а в конце - длины 2l
      for (int l = 1; l < (int) s.size(); l *= 2) 
      {
        //обнуляем массив buck  и заполняем для сортировки по col
        for (int i = 0; i < (int) s.size(); i++) 
          buck[i] = 0; 
        for (int i = 0; i < (int) s.size(); i++) 
          buck[col[i]]++; sum = 0; 
        for (int i = 0; i < cn; i++) 
          sum += buck[i], buck[i] = sum - buck[i];
        //строим новый массив в buf (не забываем сдвинуть указатель по модулю на l влево), затем копируем его в arr
        for (int i = 0; i < (int) s.size(); i++) 
          buf[buck[col[(arr[i] - l + s.size()) % s.size()]]++]=(arr[i] - l + s.size()) % s.size(); 
        arr = buf;
        //теперь перекрашиваем массив col: заполняем массив buf, увеличиваем цвет на единицу если один из цветов отличается, затем копируем
        buf[arr[0]] = 0; 
        for (int i = 1; i < (int) s.size(); i++) 
          buf[arr[i]] = buf[arr[i - 1]] + (col[arr[i]] != col[arr[i - 1]] || col[(arr[i] + l) % s.size()] != col[(arr[i - 1] + l) % s.size()]); 
        cn = buf[arr[s.size() - 1]] + 1; 
        col = buf;
      }
      //возвращаем результат
      return arr;
    }

    Это просто жуть

    chexov, 09 Февраля 2011

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

    +170

    1. 1
    double* (*(*(*fp)(int*,int*,int*))[])(float*,float*,float*);

    уже третий семпл из жгучей темы на форуме сайта wasm.ru... я цитирую: "Объявление указателя на функцию, принимающую 3 аргумента-указателя на int, а возвращающая указатель на массив указателей на функцию принимающую 3 аргумента-указателя на float и возвращающую указатель на double"))) http://www.wasm.ru/forum/viewtopic.php?pid=419403#p419403

    ReL, 08 Февраля 2011

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

    +165

    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
    if (seismicDriver()->has3DSeismic() && !seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, true);
        enableSeismicTab(1, false);
      }
      else if (!seismicDriver()->has3DSeismic() && seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, false);
        enableSeismicTab(1, true);
      }
      else if (seismicDriver()->has3DSeismic() && seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, true);
        enableSeismicTab(1, true);
      }
      else if (!seismicDriver()->has3DSeismic() && !seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, false);
        enableSeismicTab(1, false);
      }

    Этим своим первым постом предворяю серию говнокода, который пишет мой коллега, китаец, имеющий PhD по физике.

    В этом сниппете советую обратить внимание на два компонента в условиях if и на расстановку true и false в соответствии с ними.

    kitaec, 08 Февраля 2011

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

    +161

    1. 1
    throw &std::exception();

    Из того же проекта, что и http://www.govnokod.ru/5581 .
    Естественно это потом иногда удаляется по delete...

    Говногость, 08 Февраля 2011

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

    +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
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    // говно-код - вступление
                            KEY_ACCELERATOR_DATA acceleratorData;
                            WORD id; int i, j, k;
    
                            acceleratorData.line = 255;
                            acceleratorData.address = 255;
                            acceleratorData.sensors = 255;
                            acceleratorData.action = 255;
                            KeyAcceleratorDataList tempList;
    
                            // говно-код - квинтэссенция
                            for(i = 1; i < listWholeString.ItemsCount(); i++) 
                            {
                                        k = 0;
                                        strCurrSensor = listWholeString[i];
                                        if((k = strCurrSensor.Find(_T('-'), k)) <= 0)
                                                    break;
                                        acceleratorData.line = (BYTE)_ttoi(strCurrSensor.Left(k));
                                        // ну кто блядь это поймет??? Кто???!!!
                                        j = k;                            
                                        if((k = strCurrSensor.Find(_T('-'), k + 1)) <= 0)
                                                    break;
                                        acceleratorData.address = (BYTE)_ttoi(strCurrSensor.Mid(j + 1, k - (j + 1)));
    
                                        j = k;                            
                                        if((k = strCurrSensor.Find(_T('-'), k + 1)) <= 0)
                                                    break;
                                        acceleratorData.sensors = (BYTE)_ttoi(strCurrSensor.Mid(j + 1, k - (j + 1)));
    
                                        if((k = strCurrSensor.Find(_T('-'), k)) <= 0)
                                                    break;
                                        acceleratorData.action = (BYTE)_ttoi(strCurrSensor.Right(strCurrSensor.GetLength() - (k + 1)));
                                        
    
                                        if((acceleratorData.line == 255) || (acceleratorData.address == 255) || 
                                          (acceleratorData.sensors == 255) || (acceleratorData.action == 255))
                                                    break;
                                        tempList.push_back(acceleratorData);
                            }           
                            mapKeyAccelerators.operator[](id) = tempList;
                }
    // Аут… Тушите свет и сидите, где сидели… А я нахуй сам пойду…

    парень "кончал на компьютер" и даже получил сертификат Microsoft по MFC
    лучше бы он кончал на дорожного рабочего...

    ShuraKotov, 08 Февраля 2011

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

    +163

    1. 1
    throw new TSilentException("");

    Говногость, 08 Февраля 2011

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

    +149

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    struct SomeData 
    {
        ...
        double balls;
        ....
    }

    Interfere, 08 Февраля 2011

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

    +180

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    ...
    #define EXT12 	//Не комментировать эту директиву. Иначе не работает.
    ...
    #define EXT34 	//Эта директива почти не используется. Может перерефакторим без неё?
    		//Ну убирай.
    		//Давай ты.
    		//Там есть пару мест, где она используется. Поэтому я не хочу.
    		//Но ведь нужно. Эти директивы можно заменить на полиморфизм классов.
    		//Ну займись. Я не хочу. Вдруг сломается.
    ...

    У нас 2 человека работают над одной веткой проекта на С++. Люди работают в отделах на разных этажах (один на этаж выше другого). Им лень сходить друг к другу или поговорить по жаберу. Я уже как полгода наблюдаю за картиной: они переговариваются через комментарии в коде через систему контроля версий. Я не против переговоров в системе контроля версий, но они уже месяц осбуждают EXT34, а так ничего с ним и не сделали. Хоть бы комментарии удалили, если делать ничего не собираюются. Может с них 0.125 премии снять?
    Как-нибудь ещё переговоры повеселее выложу.

    Говногость, 08 Февраля 2011

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

    +160

    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
    QString convToHex( unsigned char *bytes, int size )
    {
    	if( size > 16 )
    		size = 16;
    	QString ret;
    	for( int i = 0; i < size; i++ )
    	{
    		char buf[64];
    		::snprintf( buf, sizeof(buf), "%02x", (unsigned int) bytes[i] );
    		ret += buf;
    	}	
    	return ret;
    }
    
    QString TarCreator::generateGuid( const std::string &tDeviceSerial,
    		const std::string &nDatetime, unsigned long long int id )
    {
    	std::ostringstream s;
    	s << tDeviceSerial;
    	s << nDatetime;
    	s << id;
    	
    	QCryptographicHash hash( QCryptographicHash::Md5 );
    	hash.addData( QByteArray( s.str().c_str() ) );
    	QByteArray result = hash.result();
    	return convToHex( (unsigned char*)result.data(), result.size() );
    }

    panter_dsd, 08 Февраля 2011

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