Tag: 可变参数

可变宏中令牌的连接

在C中,是否可以在可变参数宏中连接每个变量参数? 例: MY_MACRO(A, B, C) // will yield HDR_A, HDR_B, HDR_C MY_MACRO(X, Y) // will yield HDR_X, HDR_Y 正常的##运算符对于可变参数宏具有特殊含义(避免使用空参数列表的逗号)。 与__VA_ARGS__一起使用时,串联只与第一个令牌一起发生。 例: #define MY_MACRO(…) HDR_ ## __VA_ARGS__ MY_MACRO(X, Y) // yields HDR_X, Y 建议?

如果缺少参数,则将宏扩展为不同的默认宏

如果第一个参数不是预期值,是否可以扩展一个接受多个参数的宏到另一个宏 例如 int main() { PRINT(2, “%d%d\n”, i, j); //should expand to syslog(2, “%d%d\n”, i, j) PRINT(“%d%d\n”, i, j); //arg1 which is expected to be an int is not preset. /* This should expand differently may be to a default level say 3. syslog(3, “%d%d\n”, i,j); */ } 如果我知道args的总数,我会尝试过这种过载。

在无法识别##的编译器上吞并可变宏中的逗号

我需要在C中编写一个variadic宏,它必须带有零个或多个参数。 在gcc中,可以通过在逗号后添加“##”来实现,例如,##____VA_ARGS____在Variadic宏中以零参数的forms回答。 但是,我的构建系统中的编译器(超出我的控制范围)不理解,##语法,因此不会吞下逗号。 我可以使用一种解决方法吗? 谢谢!

传递可变数量的参数

我们可以将可变数量的参数传递给c中的函数吗?

用于计算参数数量的宏

我有来自第三方C库的可变参数函数: int func(int argc, …); argc表示传递的可选参数的数量。 我正在使用宏来计算参数的数量,如此处所示 。 为方便阅读,这里是宏: #define PP_ARG_N( \ _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \ _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \ _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \ _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, […]

将参数动态传递给可变参数函数

我想知道是否有任何方法可以动态地将参数传递给可变参数函数。 即如果我有一个function int some_function (int a, int b, …){/*blah*/} 我接受用户的一堆值,我想要一些方法将这些值传递给函数: some_function (a,b, val1,val2,…,valn) 我不想写所有这些function的不同版本,但我怀疑没有其他选择?