/* Debugging */
#ifdef DEBUG_THRU_UART0
# define DEBUG(...) printString (__VA_ARGS__)
#else
void dummyFunc(void);
# define DEBUG(...) dummyFunc()
#endif
我在C编程的不同标题中看到了这种符号,我基本上理解它是通过参数,但我不明白这个“三点符号”是什么叫?
有人可以通过示例解释它或提供有关VA Args的链接吗?
答案 0 :(得分:4)
这些点与__VA_ARGS__
可变参数宏一起被调用
调用宏时,其参数列表中的所有标记 [...],包括逗号, 成为变量参数。这个令牌序列取代了 宏体中的标识符 VA_ARGS ,无论它出现在哪里。
source,大胆强调我的。
使用样本:
#ifdef DEBUG_THRU_UART0
# define DEBUG(...) printString (__VA_ARGS__)
#else
void dummyFunc(void);
# define DEBUG(...) dummyFunc()
#endif
DEBUG(1,2,3); //calls printString(1,2,3) or dummyFunc() depending on
//-DDEBUG_THRU_UART0 compiler define was given or not, when compiling.
答案 1 :(得分:4)
这是一个varadic宏。这意味着您可以使用任意数量的参数调用它。他们三个 ... 类似于C中varadic function中使用的相同构造
这意味着您可以像这样使用宏
DEBUG("foo", "bar", "baz");
或者有任意数量的论点。
__VA_ARGS__再次引用宏本身的变量参数。
#define DEBUG(...) printString (__VA_ARGS__)
^ ^
+-----<-refers to ----+
因此DEBUG("foo", "bar", "baz");
将替换为printString ("foo", "bar", "baz")