Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите написать макрос для команды вывода на печать
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
Димон Безпарольный
Нужно чтобы макросы типа

MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, current time: %lu", t ) );

MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client hello" ) );

MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, max version: [%d:%d]", buf[4], buf[5] ) );

выводили на печать сообщения. Не пойму как передать переменное число аргументов в команду printf. Язык Си.

Первый аргумент можно не использовать.
Димон Безпарольный
Пока написал макросы с постоянным числом аргументов:

Код
#define MBEDTLS_SSL_DEBUG_MSG(errorCode, msg) mbedtls_debug_print_msg(msg);
#define MBEDTLS_SSL_DEBUG_MSG_1ARg(errorCode, msg, arg1) mbedtls_debug_print_msg_1ARg(msg, arg1);
#define MBEDTLS_SSL_DEBUG_MSG_2ARg(errorCode, msg, arg1, arg2) mbedtls_debug_print_msg_2ARg(msg, arg1, arg2);
#define MBEDTLS_SSL_DEBUG_MSG_3ARg(errorCode, msg, arg1, arg2, arg3) mbedtls_debug_print_msg_3ARg(msg, arg1, arg2, arg3);
#define MBEDTLS_SSL_DEBUG_MSG_4ARg(errorCode, msg, arg1, arg2, arg3, arg4) mbedtls_debug_print_msg_4ARg(msg, arg1, arg2, arg3, arg4);


Они работают, но исходные сообщения:

Код
MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", ssl->handshake->retransmit_timeout ) );


содержат лишние скобки, которые приходится убирать. таких сообщений около 150. Можно ли как - то поправить макрос чтобы он проходил с этими скобками?
gazpar
Цитата(Димон Безпарольный @ Jan 31 2018, 11:50) *


Код
#define foo(X, ...) printf(X, __VA_ARGS__)
#define bar(...) printf( __VA_ARGS__)


Это для gcc. В других компиляторах может быть по-другому.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.