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

    +176

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    __forceinline BYTE ClampShortToByte(signed short value)
    {
    	value>255?value=255:( value<0?value=0:NULL );
    
    	return (BYTE)value;
    }

    Kirinyale, 18 Февраля 2011

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

    +162

    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
    #ifdef WIN32
        string nameOfLibToLoad("C:\opt\lib\libctest.dll");
        lib_handle = LoadLibrary(TEXT(nameOfLibToLoad.c_str()));
        if (!lib_handle) {
            cerr << "Cannot load library: " << TEXT(nameOfDllToLoad.c_str()) << endl;
        }
    #else
        string nameOfLibToLoad("/opt/lib/libctest.so");
        lib_handle = dlopen(nameOfLibToLoad.c_str(), RTLD_LAZY);
        if (!lib_handle) {
            cerr << "Cannot load library: " << dlerror() << endl;
        }
    #endif

    кроссплатформенная загрузка шаренной библиотеки... может я чего то не понимаю в этой жизни, но... совершенно здесь лишний класс строки, который делает совершенно лишний вызов конструктора и добавляет совершенно лишние n-килобайт к размеру сборки...
    ссыль: http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

    ReL, 18 Февраля 2011

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

    +171

    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
    #include <iostream>
    
    template <int n>
    struct Solution
    {
      static const int count = Solution<n / 10>::count + 1;
      static const int sum = Solution<n / 10>::sum + n % 10;
      static const int last = n % 10;
      static const int first = Solution<n / 10>::first;
    };
    
    #define DECLARE_ONE_DIGIT_SOLUTION(n) template <>\
                                          struct Solution<n>\
                                          {\
                                            static const int count = 1;\
                                            static const int sum = n;\
                                            static const int last = n;\
                                            static const int first = n;\
                                          };
    
    DECLARE_ONE_DIGIT_SOLUTION(0)
    DECLARE_ONE_DIGIT_SOLUTION(1)
    DECLARE_ONE_DIGIT_SOLUTION(2)
    DECLARE_ONE_DIGIT_SOLUTION(3)
    DECLARE_ONE_DIGIT_SOLUTION(4)
    DECLARE_ONE_DIGIT_SOLUTION(5)
    DECLARE_ONE_DIGIT_SOLUTION(6)
    DECLARE_ONE_DIGIT_SOLUTION(7)
    DECLARE_ONE_DIGIT_SOLUTION(8)
    DECLARE_ONE_DIGIT_SOLUTION(9)
    
    int main()
    {
      const int number = 1024; // <-- то самое число a
    
      std::cout << "Number of digits: " << Solution<number>::count << std::endl;
      std::cout << "Sum: " << Solution<number>::sum << std::endl;
      std::cout << "Last digit: " << Solution<number>::last << std::endl;
      std::cout << "First digit: " << Solution<number>::first << std::endl;
    
      return 0;
    }

    Это один из ответов к слезной просьбе какого-то школьника (студента) выполнить за него д/з на С++ в разделе development форума на ЛОРе. Такую программу нарочно хрен напишешь.

    Само задание: «Дано натуральное число а (a≤100). Напишите программу, определяющую количество цифр в этом числе, сумму его цифр, выводящую на экран первую и последнюю цифру через два пробела».

    deniska, 16 Февраля 2011

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

    +161

    1. 1
    2. 2
    3. 3
    std::auto_ptr<ItemDesc> desc(new ItemDesc());
    ...
    m_items.insert(desc->m_item->m_name, desc.release());

    Да, я тоже говнокодер. А ведь предупреждали...

    Kirinyale, 16 Февраля 2011

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

    +157

    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
    struct Event
    {
       int priority;
       bool operator<(Event e) const
       {
          return e.priority>priority;
       }
       
       virtual void operator() () = 0;
    };
    
    priority_queue<Event*, deque<Event*> > eventQueue;
    
    template <typename T, void (T::*g)()>
    struct  TEvent : Event
    { 
       T* parent;
       virtual void operator() () 
       {
          (parent->*g)();
       }
       TEvent (T* _parent) : parent(_parent){}
    };
    
    struct Entity
    {
       int foo;
       void AFunc() 
       {
          cout<<foo;
       }
    
       void BFunc() 
       {
          cout<<"Ololo";
       }
               
       typedef TEvent<Entity,&Entity::AFunc> someEvent;
       Entity(int _foo): foo(_foo){}
             
       void addEvent()
       {
          eventQueue.push(new someEvent(this));
       }
    };
    
    int main()
    {
       Entity foo(10);
       foo.addEvent();
       (*eventQueue.top())();
       return 0;
    }

    Один из самых сложных и неочевидных способов вывести в консоль число 10.
    (Этот код - проверка, будет ли работать прототип велосипедного делегата)

    CHayT, 15 Февраля 2011

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

    +169

    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
    if (s<10)
            {
            s++;
            }
            if (s==10)
            {
            ss++; s=0;
            }
            if (ss==6 && s==0)
            {
            m++; ss=0; s=0;
            }
            if (m==10)
            {
            mm++; m=0; ss=0; s=0;
            }
            if (mm==6 && m==0)
            {
            h++; mm=0; m=0; ss=0; s=0;
            }
            if (h==10)
            {
            hh++; h=0; mm=0; m=0; ss=0; s=0;
            }
            if (hh==2 && s==0)
            {

    qbasic, 14 Февраля 2011

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

    +146

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    void CDAMN::ControlDAMNAmount(DWORD newValue)
    {
    	if(newValue != 0)
    		controlDAMNAmount = newValue;
    }
    
    DWORD CDAMN::ControlDAMNAmount()
    {
    	return controlDAMNAmount;
    }

    Автор тот же
    Две функции с одним именем. Одна изменяет внутреннее поле (член класса)- другая возвращает его значение. Использовать приставки get_ и set_ недосуг как-то. Да и называть внутренние переменные класса так, чтобы было понятно, что они не глобальные (с приставкой “m_”) тоже облом. Хайтек-шмайтек…

    ShuraKotov, 14 Февраля 2011

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

    +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
    17. 17
    18. 18
    19. 19
    class cSG5DataException ... {
        cSG5DataException(CTstatus Status, CTsymbol Error,
                          CTsymbol SubError, std::string Description, ...)
       {
         /* форматирование сообщения */
       }
       /* виртуальный деструктор наличиствует */
    };
    
    class cExcKVSDuplicateKey : public cSG5DataException  {
     /* пусто */
    };
    
    /* код */
    
        throw (cExcKVSDuplicateKey*) new cSG5DataException( CT_statusFail,
                                                            CT_errorObjectExists,
                                                            CT_errorObjectExists,
         "cKVSet_STL_map::insert( CTint k, Value& v ), %d is already in the map",k);

    вот так хитро народ обходит проблему писания конструкторов. темплейт фактори функцию сделать не догадались. но С-style конверсию типов - пожалуйста. мне честно говоря и сложно то себе представить что это как-то работать может. смена типа поинтера то на тип объекта не влияет.

    Dummy00001, 14 Февраля 2011

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

    +175

    1. 1
    2. 2
    3. 3
    port.put(0x64, 0xEE);
    for(register int r=0;r<0xffff;++r);
    port.get(0x64);

    port - объект для обращения к портам ввода\вывода компьютера.
    for - задержка между обращениями к портам (Оптимизатор С++ её конечно же убирает в релизе программы).

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

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

    +162

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    template<const bool Value>
    const bool BoolToFunc(void) const 
    {
    	return Value;
    };

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

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