【发布时间】:2013-09-25 17:02:31
【问题描述】:
有没有办法编写一个 C 预处理器宏,根据它收到的参数扩展为不同的东西?
#define foo() ???
/* 1 */
foo(name)
/* 2 */
foo(_)
想要的结果:
/* 1 */
int name;
/* 2 */
/*ignore*/
是的,我知道宏是邪恶的。我问这个主要是出于好奇。
【问题讨论】:
-
宏太棒了。
-
您能否解释一下目的,或者举一个更好的例子?该参数必须在编译时固定,这意味着您也可以使用两个不同的宏名称。
-
@mbratch:在这种特殊情况下,我使用宏来定义一组变量,但有些变量是可选的,我想避免定义它们。由于组合爆炸,多个宏名称无法正常工作:对于两个变量名称,我需要为
foo(a,b)、foo(a,_)、foo(_,b)和foo(_,_)使用单独的宏。 -
那么你是在尝试实现一种重载形式。也许您应该研究可变参数宏。看到这个问题stackoverflow.com/questions/3420459/…
-
@TheodorosChatzigiannakis:问题是我需要重载传递宏的值,而不是参数的数量。