Tag: x macros

连接X宏的多个标记

我正在尝试第一次使用X宏和预处理器连接。 我已经阅读了很多关于预处理器连接的SO的其他问题,但还没有能够解决它们或者如何使这些问题适应我的用例。 项目列表是一组structs的ID号列表,如下所示: #define LIST_OF_ID_NUMS \ X(1) \ X(2) \ X(3) \ X(4) \ X(5) \ X(6) \ X(7) \ X(8) \ X(9) \ X(10) \ X(11) 我可以像这样声明结构: #define X(id_num) static myFooStruct foo_## id_num ; LIST_OF_ID_NUMS #undef X // gives: ‘struct myFooStruct foo_n;’ where ‘n’ is an ID number 现在我还要初始化每个结构的一个成员等于ID号,这样foo_n.id = n; 。 通过使用以下内容,我已经能够实现第一个令牌连接: #define […]

X-macro打破了doxygen callgraph

我有3个文件: test.c的 int table[] = { #define X(val) val, #include “test.x” #undef X }; void level2(void) { level3(); level4(); } void level3(void) { level4(); } test2.c中 void level1(void) { level2(); level3(); level4(); } void level4(void) { } test.x X(1) X(2) X(3) 我使用doxygen为这些函数创建调用图。 这是我的预期: 1级: 引用level2(),level3()和level4()。 level2的: 引用level3()和level4()。 由level1()引用。 3级: 参考文献level4()。 由level1()和level2()引用。 级别4: 由level1(),level2()和level3()引用。 但这是我得到的: 1级: […]

我可以附加到预处理器宏吗?

在标准C或GNU扩展中有什么方法可以将内容附加到宏定义中吗? 例如 ,给定宏定义为 #define List foo bar 我可以追加bas以便List扩展,就像我定义它一样 #define List foo bar bas ? 我希望我能做到这样的事情: #define List foo bar bas #define List_ Expand(List) #undef List #define List Expand(List_) quux 但我无法弄清楚如何定义Expand()宏,所以它会做我想要的。 动机:我正在沿着以下方面玩歧视/标记的联盟: struct quux_foo { int x; }; struct quux_bar { char *s; }; struct quux_bas { void *p; }; enum quux_type {quux_foo, quux_bar, quux_bas}; struct […]