相关疑难解决方法(0)

是否有可能在可变参数宏中迭代参数?

我想知道是否有可能迭代传递给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;
}

c foreach c99 variadic c-preprocessor

66
推荐指数
5
解决办法
5万
查看次数

宏返回它在C中给出的参数数量?

是否可以编写一个返回其参数数量的C宏?

我想做的事情:

foo(1) -> 1
foo(cat, dog) -> 2
foo(red, green, blue) -> 3
Run Code Online (Sandbox Code Playgroud)

如果可以以这样的方式定义这个宏以便它与##一起工作,那就更好了

foo(1) -> bar1(1)
foo(cat, dog) -> bar2(cat, dog)
foo(red, green, blue) -> car3(red, green, blue)
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:我真的想要一个宏,而不是一个函数.使用功能的建议将被低估.

c c-preprocessor

22
推荐指数
3
解决办法
1万
查看次数

标签 统计

c ×2

c-preprocessor ×2

c99 ×1

foreach ×1

variadic ×1