- 1
- 2
- 3
- 4
- 5
- 6
#include <xmmintrin.h>
void crasher() {
    constexpr __m128 w = {1,2,3,4};
    asm ("addps %[w], %[w]" : : [w] ""(w));
}Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 15
0
#include <xmmintrin.h>
void crasher() {
    constexpr __m128 w = {1,2,3,4};
    asm ("addps %[w], %[w]" : : [w] ""(w));
}
            Крашим GCC
https://ideone.com/iIAN0i
        
+1
#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 - в более поздних).
        
−15
.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?
−15
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);
    }
// ...
            - А если... дидлок?
- Та похуй... там всёрно каждый раз новый мьютекс создается...
        
−18
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
        retgcc 6.2. Ицц/шланг туда же. But why?
−14
// .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 кодера в с++
−21
// 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?
+7
#include <iostream>
struct Test {
	operator auto() -> bool { return true; }
};
int main() {
	std::cout << std::boolalpha << Test() << std::endl;
}
            operator auto() завезли!
http://ideone.com/sGxeQn
        
+4
auto highPriority = static_cast<bool>(features(w)[5]);
// Тип features(w) - std::vector<bool>Скотт Майерс. Эффективный и современный С++.
+1
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