- 1
https://foxford.ru/wiki/informatika/tipy-tselyh-chisel-yazyka-s
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 343
−16
https://foxford.ru/wiki/informatika/tipy-tselyh-chisel-yazyka-s
Вот такая хуйня получается, когда учебные материалы по Си пишут те, которые сами нихуя не знают Си и не читали Священный Драфт Стандарта. Сколько хуйни по ссылке вы можете найти?
spoiler: https://habrahabr.ru/post/156593/
−11
#if HAVE(MERGESORT)
if (isSortingPrimitiveValues)
qsort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
else
mergesort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
#else
// FIXME: The qsort library function is likely to not be a stable sort.
// ECMAScript-262 does not specify a stable sort, but in practice, browsers perform a stable sort.
qsort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
#endif
Из какой-то древней версии Webkit. Про устойчивость сортировки. Ну типа вот хоть в ECMAScript-262 нихрена не написано про то, что сортировка должна быть устойчивой, мы сделаем ее устойчивой потому что так принято (а то сломаем еще ненароком чей-то говнокод на JS)
вот еще
https://bugs.chromium.org/p/v8/issues/detail?id=90
https://habrahabr.ru/post/303748/
−49
#include <stdio.h>
void *labels[3];
void test(void *ptr)
{
if(ptr == NULL)
{
labels[0] = &&l1;
labels[1] = &&l2;
labels[2] = &&l3;
return;
}
goto *ptr;
l1:
printf("test1\n");
return;
l2:
printf("test2\n");
return;
l3:
printf("test3\n");
return;
}
int main(void)
{
test(NULL);
test(labels[0]);
test(labels[1]);
test(labels[2]);
}
Вот если б можно было делать метки указателей внутри функций видимыми извне, такой фигни б не было
−14
#include "string.hpp"
#include "execute.hpp"
#include <iostream>
using code = decltype(
"push ebx "
"pop eax "
"exit"_s);
constexpr auto ret_val = cai::execute_code<code>;
int main()
{
std::cout << std::hex << ret_val;
return 0;
}
cai::execute_code will parse, tokenize, execute code and return value from eax register. Startup ebx value is 0xbada55. Above program will push ebx to stack and pop from stack to eax. So eax will eventually contain 0xbada55.
https://github.com/stryku/ctai compile time assembly interpreter
−16
void subBytes(uint8_t* block, size_t count) {
for (int i = 0; i < count; i++) {
size_t x, y;
char *temp = new char[2];
sprintf(temp, "%02x", block[i]);
temp = new char[4]{ temp[0], 0x00, temp[1], 0x00 };
x = stoi(temp, 0, 16);
y = stoi(temp + 2, 0, 16);
block[i] = sBox[x][y];
delete[] temp;
}
}
void invSubBytes(uint8_t* block, size_t count) {
for (int i = 0; i < count; i += 1) {
size_t x, y;
char *temp = new char[4];
sprintf(temp, "%02x", block[i]);
temp = new char[4]{ temp[0], 0x00, temp[1], 0x00 };
x = stoi(temp, 0, 16);
y = stoi(temp + 2, 0, 16);
block[i] = invSbox[x][y];
delete[] temp;
}
}
https://github.com/VenkuSkirata/MyAES/blob/5f9161551f1a743c7ca6b0ebdf492904cc097d8d/AES.cpp#L123-L147
Тут один человек просил покритиковать его код, нувыпонели
−124
Открытая встреча Национальной рабочей группы по стандартизации C++.
https://youtu.be/FcCymlVAtP8?t=3622
Я тут вам немного ПОКУШАТЬ ПРИНЕС
Они там с этими constespr похоже окончательно двинулись.
Давайте мне constexpr-асмовставки cкорей, и чтоб с гомоиконностью
−18
https://aww.moe/0fmynm.mp4
Интересно, зачем он там редактирует выхлоп из hex-rays (32 секунда)? Исходники потеряли?
−23
internal unsafe static void Memcpy(byte* dest, byte* src, int len) {
Contract.Assert(len >= 0, "Negative length in memcopy!");
//
// This is portable version of memcpy. It mirrors what the hand optimized assembly versions of memcpy typically do.
//
// Ideally, we would just use the cpblk IL instruction here. Unfortunately, cpblk IL instruction is not as efficient as
// possible yet and so we have this implementation here for now.
//
switch (len)
{
case 0:
return;
case 1:
*dest = *src;
return;
case 2:
*(short *)dest = *(short *)src;
return;
case 3:
*(short *)dest = *(short *)src;
*(dest + 2) = *(src + 2);
return;
case 4:
*(int *)dest = *(int *)src;
return;
case 5:
*(int*)dest = *(int*)src;
*(dest + 4) = *(src + 4);
return;
case 6:
*(int*)dest = *(int*)src;
*(short*)(dest + 4) = *(short*)(src + 4);
return;
case 7:
*(int*)dest = *(int*)src;
*(short*)(dest + 4) = *(short*)(src + 4);
*(dest + 6) = *(src + 6);
return;
case 8:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
return;
case 9:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
*(dest + 8) = *(src + 8);
return;
case 10:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
*(short*)(dest + 8) = *(short*)(src + 8);
return;
case 11:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
*(short*)(dest + 8) = *(short*)(src + 8);
*(dest + 10) = *(src + 10);
return;
case 12:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
*(int*)(dest + 8) = *(int*)(src + 8);
return;
case 13:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
*(int*)(dest + 4) = *(int*)(src + 4);
#endif
*(int*)(dest + 8) = *(int*)(src + 8);
*(dest + 12) = *(src + 12);
return;
case 14:
#if WIN64
*(long*)dest = *(long*)src;
#else
*(int*)dest = *(int*)src;
https://github.com/Microsoft/referencesource/blob/9da503f9ef21e8d1f2905c78d4e3e5cbb3d6f85a/mscorlib/system/buffer.cs#L266
Memcpy из Microsoft .NET Reference Source. Выглядит как типичный код на C
−28
https://i.kinja-img.com/gawker-media/image/upload/t_original/u0rtkjjphek24lmlvuet.png
Задание для истинных труЪ-кулхацкеров: даны распечатанные на бумаге исходники ядра с глючащим модулем и конфигурация железа, где это ядро запускается. Написать карандашом на листочке, как будет выглядеть кернелпаник
На самом деле - кадр из сериала Mr. Robot
https://www.youtube.com/watch?v=FQM5fU7V-MM еще там был прикольный диалог на тему Gnome KDE (странно что там он не спросил, как KDE2 под FreeBSD запатчить). И да, вот че он сразу про линукс заговорил, ведь кеды и гном и на бзд бывают? Явный косяк
−15
https://i.imgur.com/gqky9Fb.jpg
Для путинских кремлеботов надо бы запилить вореционный генератор какой-нибудь, ну или хотя бы синонимайзер прикрутить, чтоб его прогонять через тексты, написанные копирайтерами-мудаками. А то слишком палевно