在C99中,可变参数宏的空参数存在一个众所周知的问题。例如:#define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); B...
我在网络上找不到答案的一个简单问题。在可变参数宏中,如何查找参数的数量?如果使用boost预处理器有解决方案,那就没问题了。 如果这有所区别,我正在尝试将不定数目的宏参数转换为boost预处理器序列、列表或数组进行进一步处理。
考虑以下代码:#define F(x, ...) X = x and VA_ARGS = __VA_ARGS__ #define G(...) F(__VA_ARGS__) F(1, 2, 3) G(1, 2, 3) 期望输出对于两个宏都是X = 1 and VA_ARGS = 2, 3,我使...
/* Debugging */ #ifdef DEBUG_THRU_UART0 # define DEBUG(...) printString (__VA_ARGS__) #else void dummyFunc(void); # define DEBUG(...) dummyFu...
这个 this 是如何工作的?如何实现一个 C99/C++11 可变参数宏,使其根据给定的参数数量而展开为不同的内容?
我正在开发一个调用宏的项目。#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__)) 当调用它时,CALL(print,2,3,4,5); 将 2、3、4 和 5 添加到链表中(逗号重载为添加操作),并调用...
在debug版本中,我通常使用Clang编译器,因为它能更好地格式化警告和错误,并且使其更容易跟踪和修复。但最近,当我添加了一个带有可变参数的宏时,Clang 给我返回了以下信息(来自一个虚拟项目):main.cpp:5:20: warning: named variadic macros a...
一个典型的基于LOG()宏的日志记录解决方案可能看起来像这样: #define LOG(msg) \ std::cout << __FILE__ << "(" << __LINE__ << "): " << msg <...
我有一个宏在GCC中运行得很好,但在微软的C++编译器中却不行。我希望有人可以知道解决方法,或者能够解释为什么会出现这种情况。 我确定这个宏不完全符合“标准”,但它真的可以帮助我。 这里是宏的功能示例:#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N,...
我想知道在这个宏定义中,##是什么意思:#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __) 我谷歌搜索了一个答案,我找到了以下内容。 ##在没有变量参数的情况下将删除逗号。 因此,如果像这样调用宏debug("message...