default eol

Nov 12, 2013 13:22

В моей программе на работе есть 170 строчек вида 'std::cerr.*<Из них в 165 - содержатся '\n' или std::endl ( Read more... )

c++

Leave a comment

max630 November 12 2013, 20:04:29 UTC
Макросы зло (действительно ли проще всегда писать этот MY_LOG с извратным синтаксисом?). Для логов вполне сойдёт вариант с деструктором (чтобы не было двойного исключения, поставить ту функцию из std:..., не помню имени), и это уже есть, например, в QDebug и google test.

Reply

_winnie November 13 2013, 13:38:50 UTC
Для высоконагруженного сервера хочется уметь делать

if (дебажная трассировка) { только в дебаге вычислять аргументы для лога }.

В формате
MY_LOG("info at index " << i << " is: " << GenerateDebugString(i) );
можно спрятать такой if тривиальным образом.

Чтобы в "обычном" режиме не вычислять то, что не печатается, и чтобы не думать про эффективную генерацию дебажного вывода.

Reply

max630 November 13 2013, 13:45:45 UTC
вот поэтому макросы и зло - потому что написано blabla(x), a на самом деле if (луна в 4 доме, и ветер дует запада) { x }

Reply

aruslan November 14 2013, 01:07:12 UTC
в формате MY_LOG(log) << "info at index " << i << ... тоже можно эффективно спрятать или там убрать совсем, нет?

Reply

aruslan November 14 2013, 01:12:58 UTC
_winnie November 14 2013, 07:53:18 UTC
Я об этом думал, но как-то стремновато держать когтистое и зубастое животное, страдающее поносом, только за одно место :) в макросе я его могу подтыкивать с обоих сторон. Например, не надо обдумывать так глубоко, "можно ли игнорить исключения в деструкторе хелпера вывода в лог", всё тривиально.

Если у кого-то оно работало так уже, без грабель и невыполнимых хотелок, то вполне можно.

Reply

aruslan November 14 2013, 01:13:36 UTC
(про default endl - полностью согласен, очевидно.)

Reply


Leave a comment

Up