Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / define my_printf(...) / 24 сообщений из 24, страница 1 из 1
06.06.2020, 19:59
    #39966773
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Есть вывод в консоль в зависимости от дефайнов, например
Код: plaintext
1.
2.
3.
#ifdef(_DEBUG)
printf(...);
#endif


Хочу писать
Код: plaintext
1.
debug_printf(...);


а где-то в начале один раз определить
Код: plaintext
1.
2.
3.
4.
5.
#ifdef(_DEBUG)
#define debug_printf printf
#else
#define debug_printf ???
#endif


т.е. так чтобы если нет _DEBUG, то строка с debug_printf() просто игнорировалась.

Вроде что-то есть такое, но это нагуглить я не смог. Точки гугл игнорирует (((
...
Рейтинг: 0 / 0
06.06.2020, 20:03
    #39966776
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Dima T,

Код: plaintext
1.
2.
3.
4.
5.
#ifdef(_DEBUG)
#define debug_printf(...) printf(__VA_ARGS__)
#else
#define debug_printf(...)
#endif


Попробуйте.
...
Рейтинг: 0 / 0
06.06.2020, 20:03
    #39966777
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Dima Tчтобы если нет _DEBUG, то строка с debug_printf() просто игнорировалась.

Код: sql
1.
#define debug_printf(...)


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2020, 09:08
    #39966810
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Спасибо. Помогло
...
Рейтинг: 0 / 0
08.06.2020, 23:50
    #39967209
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
У меня вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#ifdef __DEBUG_MACRO__
#define logVA(LogPriority, fmt, ...)  BWrapper::Log(LogPriority, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
#else
#define logVA(LogPriority, fmt, ...)
#endif

#define logVerbose(fmt, ...)  logVA(BWrapper::LogPriority::Verbose , fmt, ##__VA_ARGS__)
#define logDebug(fmt, ...)    logVA(BWrapper::LogPriority::Debug   , fmt, ##__VA_ARGS__)
#define logInfo(fmt, ...)     logVA(BWrapper::LogPriority::Info    , fmt, ##__VA_ARGS__)
#define logWarning(fmt, ...)  logVA(BWrapper::LogPriority::Warning , fmt, ##__VA_ARGS__)
#define logError(fmt, ...)    logVA(BWrapper::LogPriority::Error   , fmt, ##__VA_ARGS__)
#define logCritical(fmt, ...) logVA(BWrapper::LogPriority::Critical, fmt, ##__VA_ARGS__)


Ну а для __DEBUG_MACRO__ в свою очередь есть свое определение. BWrapper::Log - функция форматированного вывода.
...
Рейтинг: 0 / 0
09.06.2020, 08:58
    #39967261
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Интересно. Кодинг на макросах предполагает существование более чем 1 дистрибутива продукта.
И чем больше размерность переменных влияющих на макропроцессинг тем в квадрате или в кубе
у нас растет число дистрибуций.
...
Рейтинг: 0 / 0
09.06.2020, 10:48
    #39967298
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton
Интересно. Кодинг на макросах предполагает существование более чем 1 дистрибутива продукта.
И чем больше размерность переменных влияющих на макропроцессинг тем в квадрате или в кубе
у нас растет число дистрибуций.

А кодинг на шаблонах сколько предполагает дистрибуций?
...
Рейтинг: 0 / 0
09.06.2020, 10:52
    #39967300
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Не знаю.
...
Рейтинг: 0 / 0
09.06.2020, 15:07
    #39967427
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton
Интересно. Кодинг на макросах предполагает существование более чем 1 дистрибутива продукта.
Ага. Release- и debug-сборки для трех платформ.
...
Рейтинг: 0 / 0
09.06.2020, 15:13
    #39967430
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
У меня на данный момент написано так:
[src#ifdef DEBUG
void Write(const char* const fmt, ...) __attribute__((format(gnu_printf, 1, 2)));
#else
// It will be optimized out but parameters still should be checked
inline void Write(const char* const, ...) __attribute__((format(gnu_printf, 1, 2)));
inline void Write(const char* const, ...) {}
#endif[/src]
потому что в релизной сборке всё равно неплохо бы проверять типы параметров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2020, 15:18
    #39967432
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
i386, x86_64 и для операционок Linux, FreeBSD, Windows, MacOS. Это 2 * 4 = 8. И еще 2 типа отладочного режима. Еще на 2.
16 сборок. За вычетом того что никто не собирает i386 win/mac это минус 2 штуки допустим. Останутся только красноглазики
которые любят старое железо. Итого 14 сборок можно накопать.
...
Рейтинг: 0 / 0
09.06.2020, 15:22
    #39967433
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton,

Если есть macOS, то почему нет iOS и Android?
...
Рейтинг: 0 / 0
09.06.2020, 15:24
    #39967434
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Согласен. Давай обратно накину. Только насчет андроидов я невкурсе сколько он различает мажорных
версий ОС и как там оно с совместимостью. У меня на планшете еще стоит старая 4.х а у жены на Xiaomi
там семерка или девятка ХЗ.
...
Рейтинг: 0 / 0
09.06.2020, 15:28
    #39967435
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton,

Если мы все-таки про плюсы для Android, то нам в первую очередь надо это https://developer.android.com/ndk/guides/abis
...
Рейтинг: 0 / 0
09.06.2020, 15:33
    #39967439
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
AmKad, там много букв. Вкратце. Сколько платформ получается?
...
Рейтинг: 0 / 0
09.06.2020, 15:34
    #39967440
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton,

4.
...
Рейтинг: 0 / 0
09.06.2020, 15:36
    #39967442
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
А имеет смысл для андроидных собирать с _DEBUG ?
...
Рейтинг: 0 / 0
09.06.2020, 15:41
    #39967445
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton,

Да. Для вывода логов на консоль при USB-подключении посредством ADB. В маркете же распространяется только релизная сборка.
...
Рейтинг: 0 / 0
09.06.2020, 15:45
    #39967447
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
ОК.

14 + 8 = 22.

Итого 22 разные сборки одного С++ приложения для всех возможных платформ. Правда я не уверен что этот
вопрос лежит просто в плоскости макросов. Это скорее - 22 разных конфигурации билда.
...
Рейтинг: 0 / 0
09.06.2020, 15:54
    #39967450
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
mayton
Макросы - просто как инструмент - "разлохматить" бинарь.
А что здесь имеется в виду?
...
Рейтинг: 0 / 0
09.06.2020, 15:56
    #39967452
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Поредактировал. Ах как хорошо править свои посты задним числом.
...
Рейтинг: 0 / 0
09.06.2020, 17:55
    #39967502
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Я все пытался понять, для чего мы считаем количество "дистрибуций", так и не понял.
...
Рейтинг: 0 / 0
09.06.2020, 18:13
    #39967507
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Пускай это будет загадкой.
...
Рейтинг: 0 / 0
16.06.2020, 13:11
    #39969721
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
define my_printf(...)
Встряну.

Есть ещё такая полезная штука (под виндой, как минимум, но в STL присутствует, так что не уверен):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#include <CtrDbg.h>

_RPT0(rptno, msg);
//...
_RPT5(rptno, msg, ...);
// rptno - { _CRT_WARN, _CRT_ERROR, _CRT_ASSERT, _CRT_ERRCNT }
// msg - строка с форматом, как в printf



без дебага игнорируется, с дебагом кидает текст в отладочный поток
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / define my_printf(...) / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]