- 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
ret
gcc 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