реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите написать макрос для команды вывода на печать, MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, current time: %lu",
Димон Безпарольн...
сообщение Jan 31 2018, 06:35
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



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

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

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

Сообщение отредактировал Димон Безпарольный - Jan 31 2018, 07:47
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Jan 31 2018, 08:50
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



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

Код
#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. Можно ли как - то поправить макрос чтобы он проходил с этими скобками?
Go to the top of the page
 
+Quote Post
gazpar
сообщение Jan 31 2018, 18:00
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Цитата(Димон Безпарольный @ Jan 31 2018, 11:50) *


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


Это для gcc. В других компиляторах может быть по-другому.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 12:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016