variadic-macros相关内容

可变参数宏:粘贴标记的扩展

我想知道是否可以“嵌套"可变参数宏调用.我只真正关心 GCC 和 Clang.我的宏定义如下所示: /*** @brief 调用实例方法.*/#define $(obj, 方法, ...) \({ \typeof(obj) _obj = obj;\_obj->接口->方法(_obj, ## __VA_ARGS__);\}) 我使用它来方便地在我的 OO 框架中调用“实例方法"(https:// ..
发布时间:2022-01-11 20:15:42 其他开发

与 MSVC++10 兼容的预处理器可变参数 FOR_EACH 宏

我看到了一些要求对可变参数 FOR_EACH 宏进行变体的问题.然而不幸的是,提供的答案与 VC++10 不兼容,因为它在传递给另一个宏时将 __VA_ARGS __ 扩展为一个参数.请有人提供仍然适用于 VC++10 的 C++11 兼容(因此向前兼容)版本.也许使用经常提到的“解决方法",#define EXPAND(x) x,但是我不知道把它放在哪里以获得,例如,这个答案适用于 VC++10 ..
发布时间:2021-12-26 12:24:07 C/C++开发

MSVC++ 可变参数宏扩展

所以我有一个在 GCC 中运行良好的宏,但在 Microsoft 的 C++ 编译器中不起作用.我希望有人可能知道一种解决方法,或者可以向我解释为什么它会这样. 我确定这个宏并不完全是“标准的",但它确实对我有帮助. 这是宏的功能示例: #define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N#define VA_NARGS(...) V ..
发布时间:2021-12-22 18:15:32 C/C++开发

C++ 预处理器 __VA_ARGS__ 参数数量

我在网上找不到答案的简单问题.在可变参数宏中,如何找到参数的数量?我对 boost 预处理器没问题,如果它有解决方案的话. 如果它有所作为,我正在尝试将可变数量的宏参数转换为增强预处理器序列、列表或数组,以便进一步重新处理. 解决方案 这实际上依赖于编译器,不受任何标准支持. 然而,这里有一个 宏实现 计数: #define PP_NARG(...) \PP_NARG_(__ ..
发布时间:2021-12-01 15:31:42 C/C++开发

可变常量宏,数值常量前应为')'

这是实际的宏: #ifdef调试#定义调试(函数名,格式,...)printf(粗体下划线反转\"DEBUG IN" __FILE__ \"LINE" __LINE__“:" \重设下划线反转\“中" funcname \RESET REVERSE格式RESET,## __ VA_ARGS__)#别的#定义调试(函数名,格式,...)#万一 所有使用的常量都是定义明确的字符串常量.我用类似 ..
发布时间:2021-04-24 21:03:16 其他开发

可变参数宏扩展

我想知道有什么方法可以选择性地调用C VARIADIC MACRO. 首先,让我展示一些我想要实现的代码: #include #define _VA_NARGS_IMPL(_1,_2,_3,_4,_5,_6,_7,_8,N,...) N #define _VA_NARGS(...) _VA_NARGS_IMPL(__VA_ARGS__, 8, 7, 6, 5, 4 ..
发布时间:2020-07-13 19:29:51 C/C++开发

具有零参数和逗号的可变参数宏

考虑此宏: #define MAKE_TEMPLATE(...) template 与零参数一起使用时,它会生成错误的代码,因为编译器期望逗号后有一个标识符.实际上,VC的预处理器足够聪明,可以删除逗号,但GCC却不是. 由于宏无法重载,因此在这种特殊情况下,似乎需要一个单独的宏才能正确处理它,如下所示: #define MAK ..
发布时间:2020-07-13 19:28:34 C/C++开发