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

    0

    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
    unsigned int FileScanner::smartBruteForce(QByteArray &haystack, QByteArray &needle)
    {
        unsigned int count = 0;
        unsigned int dataSize = haystack.size();
        unsigned int needleSize = needle.size();
        unsigned int needleSizeCut = needleSize - 1;
        char* dp = haystack.data();
        char* np = needle.data();
        char lastNeedle = *(np + needleSize - 1);
    
        for(unsigned int i = 0; i < dataSize - needleSize + 1; i++)
        {
            if(*(dp + (i + needleSizeCut)) != lastNeedle) //This is smart technology ))))
                continue;
            unsigned int j;
            for(j = 0; j < needleSize; j++)
            {
                if(*(dp + (i + j)) != *(np + j))
                    break;
            }
            if(j == needleSize)
                count++;
        }
        return count;
    }

    laMer007, 20 Февраля 2016

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

    −1

    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
    bool Diagram::checkIsOverlayElements(const int index)
            {
                int _x0, _y0, _xX, _yY;
    
                int x0 = _vectorFigure[index]->getCoordinate().getX0();
                int y0 = _vectorFigure[index]->getCoordinate().getY0();
                int xX = _vectorFigure[index]->getCoordinate().getXx();
                int yY = _vectorFigure[index]->getCoordinate().getYy();
    
                for(int _index = 0; _index < _vectorFigure.size(); _index++)
                {
                    _x0 = _vectorFigure[_index]->getCoordinate().getX0();
                    _y0 = _vectorFigure[_index]->getCoordinate().getY0();
                    _xX = _vectorFigure[_index]->getCoordinate().getXx();
                    _yY = _vectorFigure[_index]->getCoordinate().getYy();
    
                    if(((x0 >= _x0 && x0 <= xX)
                        &&(y0 >= _y0 && y0 <= _yY))
                        ||((xX >= _x0 && xX <= _xX)
                            &&(yY >= _y0 && yY <= _yY))
                        ||((x0 >= _x0 && x0 <= xX)
                            &&(yY >= _y0 && y0 <= _yY))
                        ||((xX >= _x0 && xX <= _xX)
                           &&(y0 >= _y0 && yY <= _yY)))
                    {
                        return true;
                    }
                }
                return false;
            }

    Проверка наложения фигур друг на друга.

    Isaac, 17 Февраля 2016

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

    −2

    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
    int abs(int x)
    {
    	int a = x;
    	if(x >= 0) 
    	{
    		return a;
    	} 
    	else if(x < 0) 
    	{
    		a = a^2;
    		a = sqrt(a);
    		return a;
    	}
    }

    Поиск абсолютного значения числа.

    DeScWD, 11 Февраля 2016

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    bool matchingNumerals(int num)
    {
    QString str = QString("%1").arg(num);
        for (int i = 0; i < 10; i++)
            if (str.split(QString("%1").arg(i)).size() > 2)
                return true;
        return false;
    }

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

    Mongrell, 03 Февраля 2016

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

    +1

    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
    // Определение метода  Q3CanvasText::text() 
    
    class Q_COMPAT_EXPORT Q3CanvasText : public Q3CanvasItem {
    //...
      QString text() const;
    //...
    };
    
    // Далее уже в "моем" классе строчка:
    class CDevice : public CDiagramObject {
    // ...
    private:
      Q3CanvasText * m_pTitle;
    //....
    public:
      const QString & stitle() const { return m_pTitle->text(); } // обратим вниманиена возвращаемый тип
    // ...
    };
    
    // Еще один класс и отображение тултипа при наведении
    void CDiagramView::showToolTip( const QPoint & p, CDevice * d ) {
    
        if( d ) {
            QString tmp;
            if( d->group() == QString::null || d->group() == "" )
                tmp = ( d->stitle().left( d->stitle().indexOf(":") ) );  // вылетало здесь : d->stitle().indexOf(":") segmentation fault
            else
                tmp = d->group();
    //.....
            }
        }

    Нашел магию!

    Юзаю Qt 4.8.6 в Linux
    Под Виндой новая версия перепиливаемой проги компилится и работает,
    под Линухом новая версия вылетает, старая робит.

    Соль в том, что метод stitle() по факту возвращает ссылку на копию текста возвращенного Q3CanvasText::text(), которая внезапно удаляется при выходе из метода.

    Но почему тот же gcc под виндой скомпилил это без багов?

    OlegUP, 03 Февраля 2016

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

    +9

    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
    int naive_show_int(int x) {
        char buf[32];
        char *p = buf + sizeof(buf);
        *--p = 0;
        int negative = 0;
        if (x < 0) {
            x = -x;
            negative = 1;
        }
        while (x > 0) {
            if (x <= 0)
                return -1;
            int digit = '0' + x % 10;
            if (digit < '0' || digit >= '9')
                return -1;
            *--p = digit;
            x /= 10;
        }
        if (negative)
            *--p = '-';
        puts(p);
        return 0;
    }

    Допустишь один UB - ничто уже не спасёт твою прогу...

    http://ideone.com/EFGoBi

    bormand, 02 Февраля 2016

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

    −1

    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
    #include <iostream>
    using namespace std;
    
    auto print(auto arg)
    {
    	return (cout<<arg);
    	//return cout;
    }
    auto print(auto arg, auto... args)
    {
    	return (print(args...)<<arg);
    	//return cout;
    }
    
    int main() {
    	print(1,"ko")<<"ok";
    	return 0;
    }

    https://ideone.com/YvoHi3
    ГЦЦ так и не научился в возвращаемые значения с авто

    laMer007, 02 Февраля 2016

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

    0

    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
    float massiv[2];
    	massiv[0] = 1.05;
    	massiv[1] = 2;
    	float summa;
    	for(int i = 0; i < 2; i++)
    	{
    		summa = summa + massiv[i];
    	}
    	ShowMessage(summa);
    
    
    VS
    
    
    	float massiv[2];
    	massiv[0] = 1.05;
    	massiv[1] = 2;
    	float summa = massiv[0] + massiv[1];
    	ShowMessage(summa);

    Бывают же люди...

    не люблю вообще наговаривать на людей, но тут уж п..здец полный.
    не знаю - не сдержался, а может сегодня звезды не так стали.
    дали мне на сопровождение код, но это еще полбеды...
    вообщем суть вопроса - человеку дали (по всей видимости)
    задачу найти сумму двух чисел. вот что он написал: (см. в коде)

    Это вместо: (см. ниже в коде под надписью VERSUS)

    И так все 100 000 строк кода.
    Как говорится программист от Б-г-а. Под Б-г я имею ввиду Бориса Гребенщикова.
    (Не знаю как кто, а я лично не перевариваю его музыку)

    P.S. Автор сего произведения сейчас работает помощником директора. Чего-то я
    наверное не понимаю в этой жизни.

    P.P.S. Все совпадения с реальными людьми и событиями случайны. Говорю потому
    что страшно - еще уволят.

    expdev, 28 Января 2016

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

    +4

    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
    #define RandomNumbers_count 16
    static unsigned char RandomNumbers[] =
    {
    	7, 167, 203, 54,
    	32, 78, 164, 112,
    	237, 182, 75, 96,
    	135, 13, 42, 27
    };
    static unsigned char CurrUrandPos = 0;
    void getURandom(void *buf, size_t size)
    {
    	if (size == 0)
    		return;
    	for (size_t i = 0; i < size; i++)
    	{
    		((char*)buf)[i] = RandomNumbers[CurrUrandPos];
    		CurrUrandPos = (CurrUrandPos + 1) % RandomNumbers_count;
    	}
    }

    Генератор псевдослучайных чисел: избавляемся от платформозависимого кода.

    tar_gz, 28 Января 2016

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

    0

    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
    #define EncryptAES256(sched) \
    		"pxor (%["#sched"]), %%xmm0 \n" \
    		"aesenc	16(%["#sched"]), %%xmm0 \n" \
    		"aesenc	32(%["#sched"]), %%xmm0 \n" \
    		"aesenc	48(%["#sched"]), %%xmm0 \n" \
    		"aesenc	64(%["#sched"]), %%xmm0 \n" \
    		"aesenc	80(%["#sched"]), %%xmm0 \n" \
    		"aesenc	96(%["#sched"]), %%xmm0 \n" \
    		"aesenc	112(%["#sched"]), %%xmm0 \n" \
    		"aesenc	128(%["#sched"]), %%xmm0 \n" \
    		"aesenc	144(%["#sched"]), %%xmm0 \n" \
    		"aesenc	160(%["#sched"]), %%xmm0 \n" \
    		"aesenc	176(%["#sched"]), %%xmm0 \n" \
    		"aesenc	192(%["#sched"]), %%xmm0 \n" \
    		"aesenc	208(%["#sched"]), %%xmm0 \n" \
    		"aesenclast	224(%["#sched"]), %%xmm0 \n"
    		
    	void ECBEncryptionAESNI::Encrypt (const ChipherBlock * in, ChipherBlock * out)
    	{
    		__asm__
    		(
    			"movups	(%[in]), %%xmm0 \n"
    			EncryptAES256(sched)
    			"movups	%%xmm0, (%[out]) \n"	
    			: : [sched]"r"(GetKeySchedule ()), [in]"r"(in), [out]"r"(out) : "%xmm0", "memory"
    		);
    	}

    https://github.com/PurpleI2P/i2pd/blob/openssl/Crypto.cpp принципиально новый подход - определять дефайном какое-то макроговно, чтобы потом его использовать внутри асмовставок

    j123123, 22 Января 2016

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