我遇到了一个问题 - 我需要使用宏值作为字符串和整数.
#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... */
Run Code Online (Sandbox Code Playgroud)
这失败了一条关于"stray#"的消息,即使它有效,我想我会得到字符串化的宏名称,而不是值.当然,我可以将值提供给最终的方法("LIMIT %d ", page*RECORDS_PER_PAGE),但它既不漂亮也不高效.当我希望预处理器不以特殊方式处理字符串并且像普通代码一样处理它们的内容时,就像这样.就目前而言,我对它进行了解决,#define RECORDS_PER_PAGE_TXT "10"但可以理解的是,我对它并不满意.
怎么做对吗?
有没有办法在c中进行字符串化之前评估表达式?
例:
#define stringify(x) #x
...
const char * thestring = stringify( 10 * 50 );
Run Code Online (Sandbox Code Playgroud)
问题是我想得到
const char * thestring = "500";
Run Code Online (Sandbox Code Playgroud)
而不是:
const char * thestring = "10 * 50";
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?