Димон Безпарольный 2 31 января, 2018 Опубликовано 31 января, 2018 (изменено) · Жалоба Нужно чтобы макросы типа 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. Язык Си. Первый аргумент можно не использовать. Изменено 31 января, 2018 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба Пока написал макросы с постоянным числом аргументов: #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 1 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба #define foo(X, ...) printf(X, __VA_ARGS__) #define bar(...) printf( __VA_ARGS__) Это для gcc. В других компиляторах может быть по-другому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться