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

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

    +12

    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
    QVector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    
    // взяли итератор на нулевой элемент вектора v1
    QVector<int>::iterator it = v1.begin();
    
    // замутили копию
    QVector<int> v2 = v1;
    
    v1[1] = 42;
    *it = 5;
    v2[1] = 100500;
    
    // и что же мы получим?
    qDebug() << v1; // QVector(1, 42)
    qDebug() << v2; // QVector(5, 100500)

    Ловим лулзы с implicit sharing'ом.

    Мораль (она описана в доке): нельзя копировать implicit shared контейнер пока живы и используются неконстантные итераторы на его элементы.

    bormand, 06 Мая 2014

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

    +12

    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
    int main()
    {
    MyList<MySubList*> *list;
    ...
    int error=makeZeroItemsNull(list)+deleteZeroItems(list);
    delete list;
    return error;
    }
    
    int makeZeroItemsNull(MyList *list)
    {
    //Удаляем указатели в списке и обнуляем
    if(list==0||error)return 1;
    return deleteZeroItems(list); //На всякий случай проверяем остались ли не удаленные элементы
    }
    
    int deleteZeroItems(MyList *list)
    {
    //Удаляем из списка обнуленные элементы
    if(list==0||error)return 2;
    return makeZeroItemsNull(list); //На всякий случай проверяем остались ли не обнуленные элементы
    }

    Учим все функции возвращать int(0) когда нет ошибок.

    IGHOR, 14 Апреля 2014

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

    +12

    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
    #include <iostream>
    
    class base
    {
    	virtual void on_create() { }
    public:
    	int value;
    	float another_value;
    
    	void create()
    	{
    		static base test;
    		if(*reinterpret_cast<unsigned int *>(this) != *reinterpret_cast<unsigned int *>(&test))
    		{
    			std::cout << "please, do not override on_create()\n";
    		}
    		on_create();
    	}
    };
    
    class derived : public base
    {
    	virtual void on_create(){}
    };
    
    int main(int argc, char * argv[])
    {
    	std::cout << "base\n";
    	base b;
    	b.create();
    
    	std::cout << "derived\n";
    	derived d;
    	d.create();
    }

    Родилось в попытке ограничить переопределение виртуального метода.
    Работает, цуко.
    http://ideone.com/gUN9OA

    Xom94ok, 20 Ноября 2013

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

    +12

    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
    #include <string>
    #include <sstream>
    #include <iostream>
    
    int main() {
        std::string str;
        std::stringstream s("");
        std::getline(s, str, '|');
        std::cout << "good=" << s.good() <<
            " bad=" << s.bad() <<
            " fail=" << s.fail() <<
            " eof=" << s.eof() << std::endl;
        return 0;
    }

    good=0 bad=0 fail=1 eof=1

    http://ideone.com/0Ceg8z

    У меня один вопрос: нахуй так жить?

    bormand, 30 Сентября 2013

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

    +12

    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
    // Вопрос: как сгенерировать в рантайме предупреждение от компилятора?
    // http://stackoverflow.com/q/4187967
    
       void f(int*p = nullptr)
        {
        if (!p)
    {
    //HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY
    }
        }
    
    
    // Ответ: очевидно же, вызвать компилятор для соответствующего кода.
    // http://stackoverflow.com/a/4188155
    
    void f(int *p = nullptr) {
        if (!p) {
            system("gcc -Wall warning.c");
        }
    }

    Каков вопрос - таков ответ.

    Xom94ok, 01 Сентября 2013

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

    +12

    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
    if  ( (_gen_statP==tm_Manual)  ||
                              (_gen_statP==tm_OK)          && (_cur_statP!=tm_Manual)  ||
                              (_gen_statP==tm_ValidTM)     && (_cur_statP!=tm_Manual)  &&  (_cur_statP!=tm_OK) ||
                              (_gen_statP==tm_Rejected)    && (_cur_statP!=tm_Manual)  &&  (_cur_statP!=tm_OK) && (_cur_statP!=tm_ValidTM) ||
                              (_gen_statP==tm_Bad)         && (_cur_statP!=tm_Manual)  &&  (_cur_statP!=tm_OK) && (_cur_statP!=tm_ValidTM) && (_cur_statP!=tm_Rejected) ||
                              (_gen_statP==tm_Statistic)   && (_cur_statP!=tm_Manual)  &&  (_cur_statP!=tm_OK) && (_cur_statP!=tm_ValidTM) && (_cur_statP!=tm_Rejected)  && (_cur_statP!=tm_Bad)
                            ) {
                                _cur_statP = _gen_statP;
                              }
    
    
                        if  ( (_gen_statQ==tm_Manual)  ||
                              (_gen_statQ==tm_OK)          && (_cur_statQ!=tm_Manual) ||
                              (_gen_statQ==tm_ValidTM)     && (_cur_statQ!=tm_Manual) && (_cur_statQ!=tm_OK) ||
                              (_gen_statQ==tm_Rejected)    && (_cur_statQ!=tm_Manual) && (_cur_statQ!=tm_OK) && (_cur_statQ!=tm_ValidTM) ||
                              (_gen_statQ==tm_Bad)         && (_cur_statQ!=tm_Manual) && (_cur_statQ!=tm_OK) && (_cur_statQ!=tm_ValidTM) && (_cur_statQ!=tm_Rejected) ||
                              (_gen_statQ==tm_Statistic)   && (_cur_statQ!=tm_Manual) && (_cur_statQ!=tm_OK) && (_cur_statQ!=tm_ValidTM) && (_cur_statQ!=tm_Rejected)  && (_cur_statQ!=tm_Bad)
                            ) {
                                _cur_statQ = _gen_statQ;
                              }

    Вроде работает, но уж больно некрасиво) по идее вычисляет новый статус в соответствии с "приоритетом"

    mapron, 06 Августа 2013

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

    +12

    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
    void FileCreate(const char *name)
    {
    	ofstream F;
    	F.open(name); // Create file 
    	F.close(); //close the file
    }
    
    void InputProduct(Product &b) //function for entering product
    {
    	char c; int i=0;
    
    	cout<<"Input name of product \n"; 
    	// enter the string until you meet the character \n or EOF or until a limit is the number of symbols
    	for ( i=0; i<l_name && (c = getchar())!= EOF && c!='\n';++i ) 
    		b.name[i] = c ; 
    	b.name[i]='\0'; // at the end of the line write the terminating line \0
    
        // rest of code ...
    }

    Студенты такие студенты ...

    denis90, 03 Августа 2013

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

    +12

    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
    struct c_test
    {
      int value;
      
      c_test(void)
      {
        (void)new (this) c_test (10);
      }
      
      c_test(int v)
      {
        value = v;
      }
    };

    LispGovno, 26 Июля 2013

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

    +12

    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
    class Random
    {
    public:
        int getInt(int min, int max)
        {
            return std::uniform_int_distribution<int>(min, max)(_rd);
        }
        
        double getReal(double min, double max)
        {
            return std::uniform_real_distribution<double>(min, max)(_rd);
        }
        
        bool getBool()
        {
            return std::uniform_int_distribution<int>(0, 1)(_rd);
        }
    
    private:
        std::random_device _rd;
    };

    Даже не знаю, говнокод это или нет.

    an0nym, 02 Июля 2013

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

    +12

    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
    template <class ToPtr,class From>
    ToPtr DynamicCast (From f)
    {
      // static check if *ToPtr is derived from f
      (void)sizeof (static_cast<From> ((ToPtr)NULL));
      // lazy precalculation
      static bool castable = dynamic_cast<ToPtr> (f)!=NULL;
      static int offset =
        int ((char *)dynamic_cast<ToPtr> (f)-(char *)f);
      return castable? (ToPtr)((char *)f+offset) : NULL;
    }
    
    // usage: TBase *ptr1 = ...; TDerived *ptr2 = DynamicCast<TDerived *> (ptr1);

    Performance oriented dynamic_cast

    Artur, 11 Июня 2013

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