如果您只想区分两个函数,可以使用以下方法:
#define ADD(_1, _2, _3, X, ...) X
#define add(...) ADD(__VA_ARGS__, add3, add2, 0)(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
辅助宏ADD总是选择第四个参数:
add(a, b) --> ADD(a, b, add3, add2, 0) --> add2
add(a, b, c) --> ADD(a, b, c, add3, add2, 0) --> add3
Run Code Online (Sandbox Code Playgroud)
缺点是,当您不向函数提供两个或三个参数时,您会收到相当神秘的错误消息。
相对于可变参数函数的优点是可以获得类型安全。例如,如果您的函数对doubles 进行操作,您仍然可以说add(1, 2)整数参数将转换为doubles。可变参数函数需要一些有关实际参数数量的附加信息,因此这不是一个可行的解决方案,除非您在函数中指定被加数的数量。
附录:我已经更改了add宏,以便它不会将空的变量列表传递给ADD. 有些编译器允许空列表,但它不是标准 C。
| 归档时间: |
|
| 查看次数: |
2595 次 |
| 最近记录: |