我有一个使用 打印输出的函数,fprintf()
它对格式字符串和参数都使用宏。由于有多个位置打印此信息,这允许在仅更改一个位置的同时扩展打印。
我想使用相同的数据生成不同的打印,但我希望它们使用 X 宏自动扩展在一起,但我无法编译它。我不希望每次添加要打印的内容时都需要编辑打印,或者将每个打印包装在丑陋#define
的 s 中。
这个程序试图做我想做的事,但它没有编译:
#include <stdio.h>
#define X(_a, _b, _c) \
_a,
#define TABLE \
X("abc", "123", "ddd") \
X("def", "456", "aaa") \
X("ghi", "789", "ddd") \
#define STUFF \
TABLE
#undef X
int main()
{
printf(" %s %s %s\n", STUFF);
return 0;
}
(想法是 STUFF 打印一件事,在另一个地方我将使用称为 TABLE 的 X 宏的不同列执行 STUFF2)
我收到以下错误:
main.c:在函数'main'中:
main.c:7:5:警告:函数“X”的隐式声明 [-Wimplicit-function-declaration]
X("abc", "123", "ddd") \ ^
main.c:12:5: 注意:在宏 'TABLE' 的扩展中</p>
TABLE ^~~~~
main.c:18:27:注意:在宏“STUFF”的扩展中</p>
printf(" %s %s %s\n", STUFF); ^~~~~
main.c:8:5: 错误:在 'X' 之前需要 ')'</p>
X("def", "456", "aaa") \ ^