Я хочу использовать sscanf
для синтаксического анализа длинной строки..
Анализируемые данные будут храниться в структуре, все члены которой имеют тип time_t
.
К сожалению, нет никакой строки формата для обозначения time_t
поэтому я просто приведу все аргументы time_t *
к типу unsigned long long *
, и поскольку это очень длинная строка с большим количеством аргументов, приведение типов каждого аргумента один за другим только испортит мой экран редактора..
Итак, я создал макрос, чтобы упростить это:
#define typecast(type, ...) (type) __VA_ARGS__
И я вызывал его так:
sscanf(string, PARSE_STRING,
typecast(unsigned long long *, /* my arguments */));
Я думал, что это расширится до:
sscanf(string, PARSE_STRING,
(unsigned long long *) /* arg1 */, (unsigned long long *) /* arg2 */, /* and so on */);
Но после проверки с помощью gcc -E
я обнаружил, что это расширено до этого:
sscanf(string, PARSE_STRING,
(unsigned long long *) /* arg1 */, /* arg2 */, /* and so on */));
Как я могу добиться желаемой функциональности расширения с помощью функций с переменным числом аргументов?
boost/preprocessor
также можно использовать в C (потому что используется только препроцессор) 21.11.2014