有没有办法编写一个 C 预处理器宏,根据它接收到的参数扩展到不同的东西?
#define foo() ???
/* 1 */
foo(name)
/* 2 */
foo(_)
期望的结果:
/* 1 */
int name;
/* 2 */
/*ignore*/
是的,我知道宏是邪恶的。我问这个主要是出于好奇。
最佳答案
要扩展 Gavin Smith 的答案,您实际上可以在宏扩展中检查条件:
#define FOO_name 1
#define FOO__ 0
#define CONC(a,b) a##_##b
#define IF(c, t, e) CONC(IF, c)(t, e)
#define IF_0(t, e) e
#define IF_1(t, e) t
#define FOO(x) IF(CONC(FOO,x), int x;, )
FOO(name) // -> int name;
FOO(_) // -> /*nothing*/
如果您喜欢冒险,您可以使用辅助宏轻松地扩展 IF
以允许逗号、抑制宏扩展等。
如上所述,尽管这确实要求您事先知道所有需要的名称。
关于c - 是否可以将预处理器条件放入 C 宏中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011019/