1. Список говнокодов пользователя Antervis

    Всего: 15

  2. C++ / Говнокод #23836

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #include <xmmintrin.h>
    
    void crasher() {
        constexpr __m128 w = {1,2,3,4};
        asm ("addps %[w], %[w]" : : [w] ""(w));
    }

    Крашим GCC
    https://ideone.com/iIAN0i

    Antervis, 28 Февраля 2018

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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    #ifdef _MSC_VER
    #  if ( _MSC_VER <= 1800) // MSVC 2012 / 2013
    typedef std::vector<char>& vector_ref;
    #  else
    typedef std::vector<char>&& vector_ref;
    #  endif
    #else
    typedef std::vector<char>&& vector_ref;
    #endif
    
    auto func = std::bind([this](vector_ref v) { /* ... */ }, std::placeholders::_1);

    тут говна вагон и маленькая тележка
    Во-первых, версии студии, компилятора студии и _MSC_VER всегда разные. Сложно даже представить человека который решил "а давайте распространять компилятор по версии SDK, а проверять по левому числу, не являющемуся ни тем ни другим?"
    Во-вторых, поддержка c++11 в msvc 2012/2013 удручает. В 2012 нет даже type aliases, потому и typedef.
    В-третьих, кривая реализация bind (rvalue-версия не соберется в студиях 12/13, lvalue - в более поздних).

    Antervis, 11 Сентября 2017

    Комментарии (12)
  4. Куча / Говнокод #22585

    −15

    1. 1
    2. 2
    3. 3
    .fsh, glsl, diff:
    -- float distance = sqrt(pow(x,2) + pow(y,2));
    ++ float distance = sqrt(x*x + y*y);

    Угадайте, сколько будет pow(-0.5,2) по версии glsl под windows?

    Antervis, 14 Марта 2017

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

    −15

    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
    void MeasureWorker::measure()
    {
        QVector< QVector<double> > *S12_AmplitudeCurveArray = new QVector< QVector<double> >;
        QVector<double> *S11_Amplitudes = new QVector<double>;
        mutex = new QMutex();
    
        if (!running) {
           return;
        }
    
        switch(mode) {
            case AUTO_MODE: {
                if (type == SofNum) {
                    if (!readSofNum()) {
                        if (deviceProblem) {
                            closeDevices();
                            stop();
                        }
                    }
                }
                if (type == SofFreq) {
                    if (!readSofFreq(S12_AmplitudeCurveArray, S11_Amplitudes)) {
                        if (deviceProblem) {
                            closeDevices();
                            stop();
                        }
                    }
                }
    
    // Дальше пока что неинтересно...
    
    bool MeasureWorker::readSofFreq(QVector<QVector<double> > *S12_AmplitudeCurveArray,
                                    QVector<double> *S11_AmplitudeCurve)
    {
        if (selectedChannel.CH1) {
            if (!oneReadSofFreq(S11_AmplitudeCurve,
                                S12_AmplitudeCurveArray, 1)) {
                return false;
            }
        } else {
            mutex->lock();
            S12_AmplitudeCurveArray->append(QVector<double>(NP51, 0.0));
            try {
                r4m->setSweepParams(START, STOP, NP51);
                r4m->startSweep();
                QVector<ComplexType> freqS11 = r4m->getData("s22");
                if (freqS11.isEmpty()) {
                    throw std::invalid_argument("freqS11 is empty");
                }
                for(ComplexType complex : freqS11) {
                    S11_AmplitudeCurve->append(complex.toLogAmp());
                }
            } catch(std::exception &e) {
                r4m->error(e.what());
                deviceProblem = true;
                return false;
            }
            mutex->unlock();
            emit updateGraphS11f(S11_AmplitudeCurve);
            Sleep(TIME_SHIFT);
        }
    
    // ...

    - А если... дидлок?
    - Та похуй... там всёрно каждый раз новый мьютекс создается...

    Antervis, 21 Декабря 2016

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

    −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
    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
    int func() {
      try {
        throw 1;
      } catch (int i) {
        return i;
      }
    }
    
    asm:
    
    func():
            push    rbp
            mov     rbp, rsp
            push    rbx
            sub     rsp, 24
            mov     edi, 4
            call    __cxa_allocate_exception
            mov     DWORD PTR [rax], 1
            mov     edx, 0
            mov     esi, OFFSET FLAT:typeinfo for int
            mov     rdi, rax
            call    __cxa_throw
            cmp     rdx, 1
            je      .L5
            mov     rdi, rax
            call    _Unwind_Resume
    .L5:
            mov     rdi, rax
            call    __cxa_begin_catch
            mov     eax, DWORD PTR [rax]
            mov     DWORD PTR [rbp-20], eax
            mov     ebx, DWORD PTR [rbp-20]
            call    __cxa_end_catch
            mov     eax, ebx
            add     rsp, 24
            pop     rbx
            pop     rbp
            ret

    gcc 6.2. Ицц/шланг туда же. But why?

    Antervis, 21 Декабря 2016

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

    −14

    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
    // .h
    SParam **calibrationTable;
    
    // .cpp
    void MeasureWorker::initDefaultCalibrationTable()
    {
        calibrationTable = new SParam* [MAX_CHAN];
    
        for (int i = 0; i < MAX_CHAN; i ++) {
            calibrationTable[i] = new SParam [NP51];
            for (int j = 0; j < NP51; j ++) {
                SParam sParam;
                sParam.pha = 0;
                sParam.amp = 0;
                calibrationTable[i][j] = sParam;
            }
        }
    }

    Вот что мешало просто написать SParam calibrationTable[MAX_CHAN][NP51] {}; ума не приложу. И так все 250 кб кода. Тьма new, ни одного delete. Вывод? Не пускайте java кодера в с++

    Antervis, 05 Декабря 2016

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

    −21

    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
    // winnt.h
    typedef wchar_t WCHAR;
    typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
    
    // winldap.h
    #define ldap_init ldap_initW
    WINLDAPAPI LDAP *LDAPAPI ldap_initW(const PWCHAR HostName,ULONG PortNumber);
    
    // my code
    // auto ldap = ldap_init(L"ldap.address", LDAP_PORT); // 1
    
    PWCHAR hostName = (WCHAR*)(L"ldap.address"); // 2
    auto ldap = ldap_init(hostName, LDAP_PORT);
    
    // auto hostName = L"ldap.address"; // 3
    // auto ldap = ldap_init(hostName, LDAP_PORT);

    Вариант (1) выдает warning. Вариант (2) работает ожидаемо. Вариант (3) ожидаемо не компилится. Вопрос: и почему это я не люблю winapi?

    Antervis, 07 Ноября 2016

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

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #include <iostream>
    
    struct Test {
    	operator auto() -> bool { return true; }
    };
    
    int main() {
    	std::cout << std::boolalpha << Test() << std::endl;
    }

    operator auto() завезли!
    http://ideone.com/sGxeQn

    Antervis, 20 Июля 2016

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

    +4

    1. 1
    2. 2
    auto highPriority = static_cast<bool>(features(w)[5]);
    // Тип features(w) - std::vector<bool>

    Скотт Майерс. Эффективный и современный С++.

    Antervis, 10 Июля 2016

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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    auto getMaxSize = [](const auto &vec) {
        if (vec.size() == 0)
            return 0;
        const auto &max = *std::max_element(
                    vec.begin(),
                    vec.end(),
                    [](const auto &lhs, const auto &rhs){
            return lhs.size() < rhs.size();
        });
        return max.size();
    };

    Раньше я не понимал актуальность шутки:
    In C++14, you just write auto auto(auto auto) { auto; } The compiler infers the rest from context

    Antervis, 23 Июня 2016

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