Как использовать макросы в функции printf - PullRequest
1 голос
/ 03 ноября 2011

Итак, у меня есть этот макрос и куча других, определенных в моем заголовочном файле

#define COL1WIDTH 16

, которые я хочу использовать, чтобы напечатать что-то вроде этого:

word  25 Dir1/FileB 129 Sat Jan 1 00:00:02 2011 12 1(x4), 2(x2), 3(x2), 4(x2), 5(x2) 

Как работает синтаксисчтобы получить работу макроса?Попробовал кучу, и она продолжает облажаться.

Пробовал это

printf("%COL1WIDTHs\t",index->terms[0].term);

Ответы [ 3 ]

8 голосов
/ 03 ноября 2011

printf("%" #COL1WIDTH "s\t", ...

Читайте о вставке токена и оцифровке в препроцессоре C.

4 голосов
/ 03 ноября 2011

Макросы не раскрываются внутри строк.Здесь есть достойный обходной путь - напишите

printf("%*s\t", COL1WIDTH, index -> terms[0].term);

и вместо 10000 будет использоваться COL1WIDTH.

0 голосов
/ 08 апреля 2014

Измените ваш код, как показано ниже, и он будет служить цели

#define COL1WIDTH "16"    //define the constant in double quotes

printf("%"COL1WIDTH"s\t",index->terms[0].term); //place macro out of quotes so it can expand            
                                                //during the precompilation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...