c++ - C/C++预处理器宏可以有默认参数值吗?

标签 c++ c macros c-preprocessor

<分区>

我们可以为宏参数指定默认参数值吗?

我知道没有任何类型检查,所以我希望默认值只不过是预处理器在未指定参数值的情况下用于宏扩展的一些文本。

最佳答案

你正在寻找一个宏重载机制,它在例如Boost.PP's facilities .

#define MACRO_2(a, b) std::cout << a << ' ' << b;

#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument

// Magic happens here:

#define MACRO(...) BOOST_PP_OVERLOAD(MACRO_, __VA_ARGS__)(__VA_ARGS__)

Demo.参数的数量与宏名称连接在一起,无需 Boost 即可轻松实现,如下所示:

#define VARGS_(_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, N, ...) N 
#define VARGS(...) VARGS_(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

#define CONCAT_(a, b) a##b
#define CONCAT(a, b) CONCAT_(a, b)

#define MACRO_2(a, b) std::cout << a << ' ' << b;

#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument

#define MACRO(...) CONCAT(MACRO_, VARGS(__VA_ARGS__))(__VA_ARGS__)

Demo .

关于c++ - C/C++预处理器宏可以有默认参数值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049491/

相关文章:

c++ - 编辑算法 : How do I meet this text editing requirements?

C - 从输入流读取,制表符作为空格

c++ - 宏的问题

c++ - 命名空间 thrust::system::cuda::thrust 中无法解释的错误,特别是在 "system_error"和 "cuda_category"

c++ - A 内的 Gumbo HTML 文本

C++如何将字符串 block 写入文件?

c - 数组声明方括号内的星号在C中是什么意思

c - if 语句有任何一个飞机输出吗?

c - 如何测试之前是否已包含 header

excel - 为什么我的 VBA 宏在打开和关闭数百个 CSV 文件后停止?