gpt4 book ai didi

c - 宏中的可变参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:12 25 4
gpt4 key购买 nike

我有两个函数 foo1(a,b) & foo2(a,b,c) 和一个宏

#define add(a,b) foo(a,b)

我需要重新定义宏来完成,

1.如果 add() 被调用时带有 2 个参数,则调用 foo1

  1. 如果使用 3 个参数调用 add() 则调用 foo2

我是 VA_ARGS 选项的新手。我该怎么做

最佳答案

如果您只是想区分两个函数,可以使用以下方法:

#define ADD(_1, _2, _3, X, ...) X
#define add(...) ADD(__VA_ARGS__, add3, add2, 0)(__VA_ARGS__)

辅助宏ADD总是选择第四个参数:

add(a, b)    --> ADD(a, b, add3, add2, 0)    --> add2
add(a, b, c) --> ADD(a, b, c, add3, add2, 0) --> add3

缺点是当您没有为函数提供两个或三个参数时,您会收到非常神秘的错误消息。

与可变参数函数相比的优势在于您可以获得类型安全性。例如,如果您的函数对 double 进行操作,您仍然可以说 add(1, 2) 并且整数参数将转换为 double秒。可变参数函数需要一些关于实际参数数量的额外信息,因此这不是一个可行的解决方案,除非您在函数中指定被加数的数量。

附录:我已经更改了 add 宏,这样它就不会将空的可变参数列表传递给 ADD。一些编译器允许空列表,但这不是标准的 C。

关于c - 宏中的可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47900290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com