охуеть, оказывается в C99 нет strdup
You may use __builtin_expect to provide the compiler with branch prediction information. In general, you should prefer to use actual profile feedback for this (-fprofile-arcs), as programmers are notoriously bad at predicting how their programs actually perform.
нельзя делать goto через область где создаётся VLA
#define SPRINTF(str, format, ...)\
char str[snprintf(0, 0, format, __VA_ARGS__)];\
sprintf(str, format, __VA_ARGS__);
С луком, с яйцами, но не пирожок^U Целочисленное и равно самому себе с минусом, но не ноль: http://ideone.com/MXfxdM
самое сложное в переходе с плюсов или жабки на сишечку — это перестать
испытывать стыд при употреблении в коде goto при обработке ошибок. Серьёзно, в
пизду этот спагетти-код, когда можно просто относиться к тому что находится за
goto как к finally секции или деструктору. просто тут код деструктора
расположен прямо в теле функции.
при грамотном использовании goto код становится линейным и легко читаемым
восемь лет назад я охуевал от ебанутости нортелевских стайлгайдов касательно именования функций, файлов и вообще. прошло восемь лет и я начал понимать, что стайлгайды-то были неплохие и для них были причины
Когда я пишу на чистом C, чувство ясности происходящего переполняет меня.
Набирая очередную строчку я уже ясно вижу в какой набор ассемблерных инструкций
она превратится и как её может соптимизировать компилятор. Я вижу неfor(i = 0...)
, а ассемблерный loop со счётчиком в ecx, я вижу не if (ptr)
,
а test
и jz
, я не творю не магию набирая магические буковки, а явственно
осознаю что я делаю. В такие моменты я чувствую себя творцом, а не колдуном.
Именно поэтому, спустя семь лет хардкорного программирования я смог слезть с
иглы C++ и обратиться в истинную веру.