@bitfield

Тег C++ в блоге bitfield

bitfield

I agree that it's a terrible way of doing things, but it's cmake we are talking about.

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 */

Линус, ты пьян, иди домой.

bitfield

bitfield

у нас было два пакетика травы ...

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

(c) https://svn.boost.org/trac/boost/ticket/12818

bitfield

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)

bitfield

Опыт работы
2009 - настоящее время -- "..." (инженер-программист)
...
IDE: ..., Borland C++ 3.1, ...

bitfield

из последнего тестового

T * temp = ...
if (temp == 0)
    return 0;
else
    return temp;
}
bitfield

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;
bitfield
 enum Status { offline, ..., online };
 Status GetStatus() const;

-  if (Status() == online) {
+  if (GetStatus() == online) {

Плохо быть крестоблядью под MSVC. По возможности избегайте этого.

bitfield

"Рефакторили, рефакторили, да не вырефакторили."

Поменяли тип переменной, а в одном ветке забыли вычитать -- в результате получили взрывающий мозг код

std::string val = "puk srenk";
...
val = rand() % 1000;

// случайный инт имплицитно конвертится в чар, который и приваивается строке.
шланг ворнинг дает только при -Wconversion, который ругается на assert(!"shit happend");
На

assert(!*"shit happend");
assert(false && "shit");

не ругается, но первое непривычно читать, а второе долго писать.

bitfield

В резюме кандидата

цель: Antigravity.

Делаю фидбек на тестовое -- куча минусов и ни одного плюса.
"Ах ты гравитация, бессердечная ты сука" (с)

bitfield

Нашли прекрасную багу у сотрудника, который в отпуске.

В заголовочном файле есть константа

#define BUFSIZE 8128

Приходит пакет размером 3 КБ и ... обрабатывается неверно.
Читаем код функции: буфер размером BUFSIZ, в который копируется пакет.
Стоп! Что такое BUFSIZ? Откуда оно берется?
F12 (Go to Definition) и попадаем в stdio.h:

#define BUFSIZ 512

PS. Осталось еще узнать, почему 8128, а не 8*1024=8192.

bitfield

Чтение отчетов с заседаний комитета стандартизации C++ напоминает чтение Википедии.

Начав читать статью "Собор Парижской Богоматери^W^W^W Concepts", внезапно обнаруживаешь, что читаешь статью "Бегемот^W Ranges".

ЗЫ. Интересно, intended ли pun в названии Trip Report?

bitfield
static inline constexpr const char *kFoo = "foo bar";
bitfield

http://blog.mattbierner.com...per-template-tetris/

Тетрис и змейка в компайлтайм на крестошаблонах.

bitfield

из очередного тестового задания

 void putinbeg(int a);
 void putinend(int a);
bitfield

У нас было 3 бинарника, 75 папок с исходниками, 5 плюсовых библиотек, пол-инсталла boost и целое множество ресурсов всех сортов и расцветок, а также MagicalRecord, Lumberjack и ReactiveCocoa в Podfile. Не то, чтобы это был необходимый запас для программы. Но если уже начал собирать код, становится трудно остановиться. Единственное, что вызывало у меня опасение -- это ReactiveCocoa. Нет ничего более беспомощного, безответственного и испорченного, чем функциональное реактивное программирование в Objective-C. Я знал, что рано или поздно мы перейдем и на эту дрянь.

bitfield

Увидел на rsdn "прекрасное":
класс CMoney с полем double m_Amount и оператором приведения к LPCTSTR (строковых полей в классе нет, если что)

bitfield

ошибка конь-фелляции

bitfield

ой какое мимими!
Вижуал Студия со спокойной душой скастила false в std::string

std::string SomeFunction() {
  // ...
  if (SomeCondition())
    return false;
  // ...
  return "Happy";
}

if занес сотрудник копипастой из другой функции. Увидел, когда пересобирал на маке шлангом.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.