我有一个使用来打印输出的函数fprintf(),并且它同时使用宏作为格式字符串和参数。由于有多个地方可以打印此信息,因此可以在仅更改一个地方的同时扩展打印范围。
我想使用相同的数据生成不同的打印,但是我希望它们使用X宏自动一起扩展,但无法编译。我不希望每次添加打印内容时都需要编辑打印内容,也不必将每个打印内容包装在ug中#define。
该程序尝试执行我想要的操作,但无法编译:
#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打印一件事,而在另一地方,我将使用X宏的另一列TABLE创建STUFF2)
我收到以下错误:
main.c:在函数“ main”中:
main.c:7:5:警告:函数'X'的隐式声明[-Wimplicit-function-declaration]
X("abc", "123", "ddd") \
^
main.c:12:5:注意:在宏“ TABLE”的扩展中
TABLE
^~~~~
main.c:18:27:注意:在宏'STUFF'的扩展中
printf(" %s %s %s\n", STUFF);
^~~~~
main.c:8:5:错误:'X'之前的预期')'
X("def", "456", "aaa") \
^
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
扩展X之前未定义STUFF会导致… X不确定。
对于X宏观工作,你必须取消定义后,在一些非宏代码有使用它(这样它可以扩展)
解决此问题后,需要在列表中移动逗号,否则最后一个逗号将触发语法错误(error: expected ‘)’ before ‘X’)。最后一个反斜杠的相同TABLE
#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
int main()
{
printf(" %s %s %s\n", STUFF);
#undef X
return 0;
}
编译,执行和打印 abc def ghi