1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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)
  6. 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)
  7. C++ / Говнокод #19326

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    QGeoTiledMap *map = new QGeoTiledMap(this,nullptr);
    QGeoMapController *controller = map->mapController();
    qDebug() << rotation << controller->bearing(); // 30 0
    controller->setBearing(rotation);
    qDebug() << controller->bearing(); // 0
    return map;

    because fuck you that's why

    Antervis, 19 Января 2016

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

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    class ResourcePack
    {
        MultipleLinearMaps<string, Texture, Mesh, Model3D, VideoBuffer, Shader, ShaderObj, Framebuffer,
    		Effect, PostEffect, Sampler, VertexLayout, StructureType, ParameterBlock,
    		ShaderTemplate, ShaderModuleTemplate, ShaderModule, ShaderModuleType,
    		ShaderGenerator, ShaderLibrary, ImageFunction> maps;
    
        //...
    };

    Наконец-то я осилил variadic templates!

    gammaker, 16 Января 2016

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

    +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
    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
    /***
    *assert.h - define the assert macro
    *
    *       Copyright (c) Microsoft Corporation. All rights reserved.
    *
    *Purpose:
    *       Defines the assert(exp) macro.
    *       [ANSI/System V]
    *
    *       [Public]
    *
    ****/
    
    
    /*
    #include <crtdefs.h>
    
    #undef  assert
    
    #ifdef  NDEBUG
    
    #define assert(_Expression)     ((void)0)
    
    #else
    
    #ifdef  __cplusplus
    extern "C" {
    #endif
    
    _CRTIMP void __cdecl _wassert(_In_z_ const wchar_t * _Message, _In_z_ const wchar_t *_File, _In_ unsigned _Line);
    
    #ifdef  __cplusplus
    }
    #endif
    
    #define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
    
    #endif   */
    
    #pragma once
    #ifdef NDEBUG
    #define assert(expr)
    #else
    inline void CheckExpression_(bool expr)
    {
    	if (!expr)
    	{
    		expr=true; // put breakpoint here, happy user;
    		CheckExpression_(expr);
    	}
    }
    
    inline void CheckExpression_(void* expr)
    {
    	if (!expr)
    	{
    		expr=(void*)(1); // put breakpoint here, happy user;
    		CheckExpression_(expr);
    	}
    }
    
    #define assert(expr) CheckExpression_(expr);
    #endif

    Сука я не знаю, почему в студии-2008 родной ассерт показывает не ту строку, на которой он произошёл и в стеке вызовов хуйня какая-то, и как подключить DebugBreak я тоже не знаю, потому что в windef.h куча хуеты, выдающей 100500 ошибок компиляции. Чтобы хоть как-то можно было жить, пришлось сделать так.

    TarasB, 13 Января 2016

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    pair<vector<pair<pair<pair<int, int>, pair<int, int>>, int>>, int> prima2D(vector<pair<pair<pair<int, int>, pair<int, int>>, int>> &edges, int n, int m, vector<vector<int>> czar_id=vector<vector<int>>()) {
    	sort(edges.begin(), edges.end(), [](
    										 pair<pair<pair<int, int>, pair<int, int>>, int> &a,
    										 pair<pair<pair<int, int>, pair<int, int>>, int> &b ){
    		return a.y < b.y;
    	});

    Jatana, 31 Декабря 2015

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