【发布时间】:2017-02-07 22:39:09
【问题描述】:
为什么inner_LOAD_ATOM(buffer, ATOM_MAX) 被转换为scanf("%" "ATOM_MAX" "s", x) 但包装后的版本没有?我希望 ATOM_MAX(identifier) 在“传递”给inner_LOAD_ATOM 或LOAD_LINE 之前被 10 替换,并使包装器无用。非常感谢更详细的回答为什么需要包装器。
#include <stdio.h>
#define ATOM_MAX 10
#define inner_LOAD_ATOM(x, y) scanf("%" #y "s", x) /* inner part */
#define LOAD_ATOM(x, y) inner_LOAD_ATOM(x, y) /* wrapper of inner_LOAD_ATOM */
int main(void)
{
char buffer[ATOM_MAX] = {0, };
/* wrapped works fine */
LOAD_ATOM(buffer, ATOM_MAX);
/* [Warning] unknown conversion
type character 'A' in format [-Wformat=] */
inner_LOAD_ATOM(buffer, ATOM_MAX);
printf("%s\n", buffer);
return 0;
}
【问题讨论】:
标签: c macros stringification