I agree that it's a terrible way of doing things, but it's cmake we are talking about.
Тег C++ в блоге bitfield
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
Линус, ты пьян, иди домой.
у нас было два пакетика травы ...
I've applied libFuzzer to regexp library and found 5 heap-buffer-overflows, stack overflow, assert failure, use of uninitialized data, SIGSEGV, infinite loop, undefined shift, invalid enum value and a bunch of memory leaks
Strictly speaking, it is an error to say size_t without using namespace std; or using std::size_t;. However, most compilers allow it, and the Standard specifically allows them to allow it (§D.5/3)
Опыт работы
2009 - настоящее время -- "..." (инженер-программист)
...
IDE: ..., Borland C++ 3.1, ...
Boost и стандарт дал им chrono::duration и типы nanoseconds/milliseconds/seconds.
Нет, мы запилим функцию
uint64_t Tools::Time() { return chrono::system_clock::now().time_since_epoch().count(); }
и будем везде юзать uint64_t для времени.
А поскольку на винде и посих резолюшен у system_clock разный (100 нс и 1 нс, соответсвенно), в разных частях проекта появляется
auto millesecs = Tools::Time() / 1000 / 1000;
...
auto secs = Tools::Time() / 10000000;
enum Status { offline, ..., online };
Status GetStatus() const;
- if (Status() == online) {
+ if (GetStatus() == online) {
Плохо быть крестоблядью под MSVC. По возможности избегайте этого.
"Рефакторили, рефакторили, да не вырефакторили."
Поменяли тип переменной, а в одном ветке забыли вычитать -- в результате получили взрывающий мозг код
std::string val = "puk srenk";
...
val = rand() % 1000;
// случайный инт имплицитно конвертится в чар, который и приваивается строке.
шланг ворнинг дает только при -Wconversion, который ругается на assert(!"shit happend");
На
assert(!*"shit happend");
assert(false && "shit");
не ругается, но первое непривычно читать, а второе долго писать.
В резюме кандидата
цель: Antigravity.
Делаю фидбек на тестовое -- куча минусов и ни одного плюса.
"Ах ты гравитация, бессердечная ты сука" (с)
Нашли прекрасную багу у сотрудника, который в отпуске.
В заголовочном файле есть константа
#define BUFSIZE 8128
Приходит пакет размером 3 КБ и ... обрабатывается неверно.
Читаем код функции: буфер размером BUFSIZ, в который копируется пакет.
Стоп! Что такое BUFSIZ? Откуда оно берется?
F12 (Go to Definition) и попадаем в stdio.h:
#define BUFSIZ 512
PS. Осталось еще узнать, почему 8128, а не 8*1024=8192.
Чтение отчетов с заседаний комитета стандартизации C++ напоминает чтение Википедии.
Начав читать статью "Собор Парижской Богоматери^W^W^W Concepts", внезапно обнаруживаешь, что читаешь статью "Бегемот^W Ranges".
ЗЫ. Интересно, intended ли pun в названии Trip Report?
http://blog.mattbierner.com...per-template-tetris/
Тетрис и змейка в компайлтайм на крестошаблонах.
У нас было 3 бинарника, 75 папок с исходниками, 5 плюсовых библиотек, пол-инсталла boost и целое множество ресурсов всех сортов и расцветок, а также MagicalRecord, Lumberjack и ReactiveCocoa в Podfile. Не то, чтобы это был необходимый запас для программы. Но если уже начал собирать код, становится трудно остановиться. Единственное, что вызывало у меня опасение -- это ReactiveCocoa. Нет ничего более беспомощного, безответственного и испорченного, чем функциональное реактивное программирование в Objective-C. Я знал, что рано или поздно мы перейдем и на эту дрянь.
Увидел на rsdn "прекрасное":
класс CMoney с полем double m_Amount и оператором приведения к LPCTSTR (строковых полей в классе нет, если что)
ой какое мимими!
Вижуал Студия со спокойной душой скастила false в std::string
std::string SomeFunction() {
// ...
if (SomeCondition())
return false;
// ...
return "Happy";
}
if занес сотрудник копипастой из другой функции. Увидел, когда пересобирал на маке шлангом.