我遇到了一个问题 - 我需要使用宏值作为字符串和整数。宏值的字符串化
#define RECORDS_PER_PAGE 10
/*... */
#define REQUEST_RECORDS \
"SELECT Fields FROM Table WHERE Conditions" \
" OFFSET %d * " #RECORDS_PER_PAGE \
" LIMIT " #RECORDS_PER_PAGE ";"
char result_buffer[RECORDS_PER_PAGE][MAX_RECORD_LEN];
/* ...and some more uses of RECORDS_PER_PAGE, elsewhere... */
这失败,一个关于“流浪#”消息,即使它的工作,我想我会得到的宏名字符串化,而不是值。当然,我可以将这些值填入最终方法("LIMIT %d ", page*RECORDS_PER_PAGE
),但它既不美观也不有效。 当我希望预处理器没有以特殊方式处理字符串,并且像处理普通代码一样处理它们的内容时,就像这样。 现在,我用#define RECORDS_PER_PAGE_TXT "10"
来搪塞它,但可以理解的是,我对此并不满意。
如何解决此问题?
在gcc上为我正确预处理。 – kennytm 2010-04-16 13:29:14
Linux内核示例:http://lxr.free-electrons.com/source/include/linux/stringify.h?v=4.7 – 2016-11-03 17:10:51