171得票12回答
GCC的##__VA_ARGS__技巧的标准替代方案是什么?

在C99中,可变参数宏的空参数存在一个众所周知的问题。例如:#define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); B...

130得票12回答
C++预处理器__VA_ARGS__参数数量

我在网络上找不到答案的一个简单问题。在可变参数宏中,如何查找参数的数量?如果使用boost预处理器有解决方案,那就没问题了。 如果这有所区别,我正在尝试将不定数目的宏参数转换为boost预处理器序列、列表或数组进行进一步处理。

71得票3回答
MSVC不能正确扩展__VA_ARGS__。

考虑以下代码:#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,我使...

58得票3回答
宏定义中的__VA_ARGS__是什么意思?

/* Debugging */ #ifdef DEBUG_THRU_UART0 # define DEBUG(...) printString (__VA_ARGS__) #else void dummyFunc(void); # define DEBUG(...) dummyFu...

45得票5回答
宏可以通过参数数量进行重载吗?

这个 this 是如何工作的?如何实现一个 C99/C++11 可变参数宏,使其根据给定的参数数量而展开为不同的内容?

38得票7回答
具有零参数的可变参数宏

我正在开发一个调用宏的项目。#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__)) 当调用它时,CALL(print,2,3,4,5); 将 2、3、4 和 5 添加到链表中(逗号重载为添加操作),并调用...

34得票4回答
可变参数宏是非标准的吗?

在debug版本中,我通常使用Clang编译器,因为它能更好地格式化警告和错误,并且使其更容易跟踪和修复。但最近,当我添加了一个带有可变参数的宏时,Clang 给我返回了以下信息(来自一个虚拟项目):main.cpp:5:20: warning: named variadic macros a...

33得票2回答
使用模板元编程实现更好的LOG()宏

一个典型的基于LOG()宏的日志记录解决方案可能看起来像这样: #define LOG(msg) \ std::cout << __FILE__ << "(" << __LINE__ << "): " << msg <...

28得票3回答
MSVC++ 可变宏展开

我有一个宏在GCC中运行得很好,但在微软的C++编译器中却不行。我希望有人可以知道解决方法,或者能够解释为什么会出现这种情况。 我确定这个宏不完全符合“标准”,但它真的可以帮助我。 这里是宏的功能示例:#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N,...

21得票2回答
##__VA_ARGS__ 是什么意思?

我想知道在这个宏定义中,##是什么意思:#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __) 我谷歌搜索了一个答案,我找到了以下内容。 ##在没有变量参数的情况下将删除逗号。 因此,如果像这样调用宏debug("message...