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

    +18

    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
    bool isRightTriangle(int a, int b, int c)
    {
        int przeciw=a;
    	if (b>przeciw) przeciw = b;
    	if (c>przeciw) przeciw = c;
    
    	if (przeciw=a)
    		if (a*a==b*b+c*c) return true;
    	else if (przeciw=b)
    		if (b*b==a*a+c*c) return true;
    	else if (przeciw=c)
    		if (c*c==a*a+b*b) return true;
                
        return false;
    }

    Fai, 11 Ноября 2012

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

    +17

    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
    #include <iostream>
     
    template< class Val >struct SwithClass
    {
        SwithClass( const Val & v ):val(v){}
        void operator() (){}
        template < class E, class F, class ... Args > void operator() ( E e, F f, Args ... args )
        {
           if( e==val )  f(); 
           else  (*this)( args... );
        }
    private:
        Val val;
    };
     
    template< class Val > SwithClass<Val> Swith( const Val& v ){  return SwithClass<Val>(v);}
     
    int main()
    {
        int x = 8;
        Swith( x )
        (
           1,  [](){  std::cout <<"x=1" << std::endl;  },
           8,  [](){  std::cout <<"x=8" << std::endl;  } 
        );
       return 0;
    }

    http://ideone.com/Xbj46U

    LispGovno, 11 Ноября 2012

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

    +22

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    int AzFl_PSD_Image::ReadIntFromPsdFile(const unsigned char *offset)
    {
    	char i[4];
    	i[0] = offset[3];
    	i[1] = offset[2];
    	i[2] = offset[1];
    	i[3] = offset[0];
    	int *r = (int*)i;
    	return r[0];
    }

    Невиноватый я что програмисты из адоба биты задом на перед в файл пишут :`(

    Psionic, 08 Ноября 2012

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

    +16

    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
    QString QSqlResultPrivate::positionalToNamedBinding()
    {
        int n = sql.size();
    
        QString result;
        result.reserve(n * 5 / 4);
        bool inQuote = false;
        int count = 0;
    
        for (int i = 0; i < n; ++i) {
            QChar ch = sql.at(i);
            if (ch == QLatin1Char('?') && !inQuote) {
                result += qFieldSerial(count++);
            } else {
                if (ch == QLatin1Char('\''))
                    inQuote = !inQuote;
                result += ch;
            }
        }
        result.squeeze();
        return result;
    }
    
    // Пример запроса:
    // select * from some where d_t = "2012-11-08 12:00:00"

    Словили сегодня вот такой глюк в кутишечке.

    База данных отлично понимает строки и даты в двойных кавычках, все это даже работало какое-то время. Но когда попытались исполнить запрос с таймштампом в двойных кавычках (как в строке 25), начала возникать ошибка в духе "непонятные символы в дате". В одинарных же кавычках все работало. После копания в исходниках и гуглёжки выяснилась и причина - QtSql в упор не видит двойных кавычек, и пытается проставить в них именованные параметры (в нашем случае :00, :00)...

    Если кому нужен быстрофикс - берем тут: https://bugreports.qt-project.org/browse/QTBUG-27159

    bormand, 08 Ноября 2012

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

    +18

    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
    #include <iostream>
     
    int main() {
        // Инициализируй меня... полностью.
        void (*(&(*omg[])())[1]) (void (*)(void (*(*[])())())) = { [] () ->
        void (*(&)[1]) (void (*)(void (*(*[])())())) { static void (*f[])
        (void (*)(void (*(*[])())())) = { [] (void (*f)(void (*(*[])())())) {
        static void (*(*ff[])())() = { [] () -> void (*)() { return [] () {
        std::cout << "Test OK" << std::endl; }; } }; f(ff); } }; return f; } };
     
        // Вызывай, вызывай меня... полностью.
        omg[0]()[0]([] (void (*(*f[])())()) { f[0]()(); });
     
        return 0;
    }

    http://ideone.com/gvg1B7

    Говнокоду http://govnokod.ru/12066 посвящается.

    Инициализация массива указателей на функции, возвращающих ссылку на массив указателей на функции принимающие указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию ничего не принимающую и ничего не возвращающую.

    С++ это простой и наглядный язык.

    bormand, 07 Ноября 2012

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

    +11

    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
    int a[4]={}; 
    void f(void){} 
    void functionWithArrayParam(int (&a)[4])
    {
            a[3]=4;
    } 
    void functionWithFunctionParam(void (*f)(void))
    {
            f();
    }; 
    int (&functionReturnArray(void))[4]
    {
            return a;
    } 
    void (*arrayOfFunction[4])(void)={f,f,f,f}; 
    void (*functionReturnFunction(void))(void)
    {
            return f;
    }; 
    int main() {
            functionReturnArray()[3]=4;
            functionWithArrayParam(a);
            arrayOfFunction[3]();
            functionWithFunctionParam(f);
            functionReturnFunction()();

    Батхертный путь C++
    Просветление — состояние полной осознанности (выход за пределы дуального ума)... Это скачкообразное изменение восприятия окружающего мира, знаменующее собой переход к отличной от общепринятой форме мышления. Одновременно является началом открытия чакры «третьего глаза» и трамплином для глубоких изменений сознания. Как витальная форма, тяжело поддается ментальному описанию.
    Батхертный путь C++ - путь, которым идут просветленные последователи Дао и Дзен С++, способные писать всё в одном выражении.

    Доступность этого пути в C++ усиливает возможности C++ по созданию одного и того же кода самыми разнообразными и очень красивыми способами.

    Следуя этому пути можно писать такой крутой код, что все товарищи из команды, работающие над кодом, над которым вы работаете вместе с ними, будут завидовать вам и бить вас за это при каждой встрече с разворота.

    Этот принцип батхертного пути C++, лежащий в основе C++, помогает потратить дополнительные 1000% времени на разработку и поддержку C++ программ и получить за это дополнительные деньги. Поэтому C++ крайне выгоден!

    Взглянем на малую часть основ этого пути при объявлении массивов и функций в C++:
    Док-ва истинности пути к просветлению:
    http://ideone.com/FCW4f

    Итак, используя эти простые принципы нужно написать массив функций, возвращающих массив функций с параметром функция, принимающая массив функций, возвращающих функцию void (void)? typedef запрещён.

    Останется только один! Истинный просветленный носитель разума и света!

    Если вы знаете другие основы батхертного пути C++, то искренне прошу поделиться с нами вашими открытыми чакрами.

    LispGovno, 06 Ноября 2012

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

    +11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    typedef void Start1(void);
    struct Kernel
    {
        Start1 Start;
    } kernel;
     
    void Kernel::Start(void)
    {
     
    }

    Как всегда оттуда.

    LispGovno, 06 Ноября 2012

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

    +16

    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
    void keyStart(int key,void (*func)())
    {
      while(SDL_PollEvent(&keyEvent))
      {
        switch(keyEvent.type)
        {
          case SDL_KEYDOWN:
            switch(keyEvent.key.keysym.sym)
            {
              /*Выход*/
              case SDLK_ESCAPE:
              func();
              break;
              case SDLK_w:
              func();
              break;
              case SDLK_q:
              func();
              break;
              default:
              break;
            }
          break;
          default:
          break;
        }
      }
          
    }

    Функция высшего порядка, мужики. Сами знаете откуда.

    LispGovno, 06 Ноября 2012

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

    +26

    1. 1
    2. 2
    3. 3
    // ...
    c=getchar();
    if(c==*" ") cout << "space";

    Tanger, 02 Ноября 2012

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

    +23

    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
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    #include <iostream>
    #include <stdlib.h>
    #include <typeinfo>
     
    using namespace std;
     
    #define ololo for(volatile register int i=0;i<10;++i);
     
    struct VB
    {
            virtual void f() const =0;
    };
     
    class V1: public VB
    {
            void f() const {ololo}
    };
     
    class V2: public VB
    {
            void f() const {ololo}
    };
     
    struct TU1
    {
            inline void f() const {ololo}
    };
     
    struct TU2
    {
            inline void f() const {ololo}
    };
     
    struct TUB
    {
            const type_info* type;
            union 
            {
                    TU1 tu1;
                    TU2 tu2;
            };
     
            template<class T>
            void ctor()
            {
                    this->type=&typeid(T);
            }
            
            template<class T>
            inline void call(const T& f)
            {
                    if(this->type==&typeid(TU1))
                            f(this->tu1);
                    else
                            f(this->tu2);
            }
    };
     
    enum {N=1000, N2=N*50};
     
    int main() {
            cout<<"ok"<<endl;
            {
                    VB*v[N];
                    for(int i=0;i<N;++i)
                            if(rand()%2)
                                    v[i]=new V1;
                            else
                                    v[i]=new V2;
                    volatile clock_t a=clock();
                    for(int j=0;j<N2;++j)
                            for(int i=0;i<N;++i)
                                    v[i]->f();
                    volatile clock_t b=clock();
                    cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
            }
            cout<<"ok"<<endl;
            {
                    TUB v[N];
                    for(int i=0;i<N;++i)
                            if(rand()%2)
                                    v[i].ctor<TU1>();
                            else
                                    v[i].ctor<TU2>();
                    struct Continuation
                    {
                            inline void operator()(const TU1& a) const {a.f();}
                            inline void operator()(const TU2& a) const {a.f();}
                    } cps;
                    volatile clock_t a=clock();
                    for(int j=0;j<N2;++j)
                            for(int i=0;i<N;++i)
                                    v[i].call(cps);
                    volatile clock_t b=clock();
                    cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
            }
            cout<<"ok"<<endl;
            return 0;
    }

    http://ideone.com/plFaLM
    Тут в соседней теме разгорелся спор, что быстрее - полиморфизм виртуальных функций или полиморфизм tagget union. По сути последнее - выбор по if нужной виртуальной функции. Говорят в Java быстрее второе.
    Тема родилась из http://govnokod.ru/12025#comment158188
    Получилось по результатам измерений:
    Виртуальные функции: 1.8 секунд.
    tagget union: 1.94 секунд.
    Притом это всего 2 полиморфных типа в tagget union, а если рост числа полиморфных классов будет расти, то разрыв между виртуальными функциями и tagget union только увеличится. Притом производительность tagget union будет только падать.
    Тема поднята ещё со взглядом на функциональные языки. Это ведь там так модны ADT с постоянным внутри ifподобным паттернматчингом по ним.
    Жду указания на косяки или способы поднять производительность tagget union.

    LispGovno, 31 Октября 2012

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