Jump to content

    

Помогите написать макрос для команды вывода на печать

Нужно чтобы макросы типа

 

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. Язык Си.

 

Первый аргумент можно не использовать.

Edited by Димон Безпарольный

Share this post


Link to post
Share on other sites

Пока написал макросы с постоянным числом аргументов:

 

#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. Можно ли как - то поправить макрос чтобы он проходил с этими скобками?

Share this post


Link to post
Share on other sites

 

#define foo(X, ...) printf(X, __VA_ARGS__)
#define bar(...) printf( __VA_ARGS__)

 

Это для gcc. В других компиляторах может быть по-другому.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this