Size: a a a

2020 December 11

e

eugene_steps in pro.cxx
Danya
Так это варнинг, а не ошибка
да, но там -Werror
источник

e

eugene_steps in pro.cxx
Danya
Но может лучше fmtlib?
это да, но внутри не поменять сейчас, вызывается printf там
источник

D

Danya in pro.cxx
eugene_steps
да, но там -Werror
Ну надо отключить Werror для этого варна
источник

D

Danya in pro.cxx
Он просто ругается, что не может проверить, что аргументы printf соответствуют форматной строке
источник

e

eugene_steps in pro.cxx
да если б можно было отключить тогда вопроса бы и не возникло)
источник

D

Danya in pro.cxx
eugene_steps
да если б можно было отключить тогда вопроса бы и не возникло)
-Wno-format-nonliteral ?
источник

e

eugene_steps in pro.cxx
Danya
-Wno-format-nonliteral ?
не, в смысле как отключать понятно, но толку, кроме моей машины больше не соберется нигде
источник

e

eugene_steps in pro.cxx
вопрос больше можно ли обойти или выкидывать вариадик
источник

D

Danya in pro.cxx
eugene_steps
не, в смысле как отключать понятно, но толку, кроме моей машины больше не соберется нигде
Почему не соберется?
источник

e

eugene_steps in pro.cxx
Danya
Почему не соберется?
потому что на билд сервере все это включено
источник

ПК

Побитый Кирпич... in pro.cxx
eugene_steps
Имею вызов printf из шаблона вроде такого:

template <typename ...Args>
void print_message (const char *format, Args&&... args)
{
 printf(format, std::forward<Args>(args)...);
}

Используем:
print_message("test %d %d", 5, 5);


И
error: format not a string literal, argument types not checked [-Werror=format-nonliteral]

Логично в общем-то, можно как-то из вариадика вызвать printf так или надо писать просто ... и устраивать всякие пляски с va* штуками?
Смысла в таком шаблоне 0
источник

D

Danya in pro.cxx
eugene_steps
потому что на билд сервере все это включено
Ну так надо добавить это в настройки сборки
источник

Р

Рамиль in pro.cxx
eugene_steps
Имею вызов printf из шаблона вроде такого:

template <typename ...Args>
void print_message (const char *format, Args&&... args)
{
 printf(format, std::forward<Args>(args)...);
}

Используем:
print_message("test %d %d", 5, 5);


И
error: format not a string literal, argument types not checked [-Werror=format-nonliteral]

Логично в общем-то, можно как-то из вариадика вызвать printf так или надо писать просто ... и устраивать всякие пляски с va* штуками?
template<typename ... Args>
   void P(const char* f, Args ... args)
   {
       printf(f, args...);
   }
источник

D

Danya in pro.cxx
Побитый Кирпич
Смысла в таком шаблоне 0
+
источник

Р

Рамиль in pro.cxx
Побитый Кирпич
Смысла в таком шаблоне 0
Контроль, в любой момент там можно поставить return и вывод прекратится. Не нужно везде где используется комментировать.
источник

D

Danya in pro.cxx
Рамиль
Контроль, в любой момент там можно поставить return и вывод прекратится. Не нужно везде где используется комментировать.
Вы о чем вообще? Какой return? Куда поставить?
источник

Р

Рамиль in pro.cxx
template<typename ... Args>
   void P(const char* f, Args ... args)
   {
       return;
       // printf(f, args...); - либо так

   }
источник

D

Danya in pro.cxx
Рамиль
template<typename ... Args>
   void P(const char* f, Args ... args)
   {
       return;
       // printf(f, args...); - либо так

   }
Для этого используют библиотеки для логирования специальные
источник

Р

Рамиль in pro.cxx
Если есть такая возможность, то да используют. Но на армах таких библиотек нет либо они тяжелые
источник

A

Alex in pro.cxx
Смотрел пару этих библиотек, все слишком заумные и тяжелые внутри. Написал свой класс и доволен, юзаем в проде уже лет 8.
Это я не к тому, что библиотеки плохие, а к тому, что я тоже вижу нишу для собственных реализаций.
источник