我想知道是否有可能迭代传递给C99中的可变参数宏或使用任何GCC扩展的参数?
例如,是否可以编写一个通用的宏,它接受一个结构,并将其字段作为参数传递,并打印结构中每个字段的偏移量?
像这样的东西:
struct a {
int a;
int b;
int c;
};
/* PRN_STRUCT_OFFSETS will print offset of each of the fields
within structure passed as the first argument.
*/
int main(int argc, char *argv[])
{
PRN_STRUCT_OFFSETS(struct a, a, b, c);
return 0;
}
我想编写一个预处理器宏,如果它的参数是带括号的标记元组,它会做一件事,如下所示:
MY_MACRO((x, y))
Run Code Online (Sandbox Code Playgroud)
如果它只是一个令牌,还有其他东西,如下所示:
MY_MACRO(x)
Run Code Online (Sandbox Code Playgroud)
那可能吗?
如何区分空格分隔的标记的数量,即MY_MACRO(x)和MY_MACRO(x y)?之间?
请注意,我不是试图根据参数的数量重载 - 它在所有情况下都是一元宏.
编辑:如果他们有所帮助,我愿意使用可变参数宏