/* Debugging */
#ifdef DEBUG_THRU_UART0
# define DEBUG(...) printString (__VA_ARGS__)
#else
void dummyFunc(void);
# define DEBUG(...) dummyFunc()
#endif
我已经在C编程的不同头文件中看到了这种表示法,我基本上理解了它正在传递参数,但是我不明白这种“三点表示法”是什么意思?
有人可以举例说明还是提供有关VA Args的链接?
这是variadic宏。这意味着您可以使用任意数量的参数来调用它。这三个...
与C
这意味着您可以使用这样的宏
DEBUG("foo", "bar", "baz");
或带有任意数量的参数。
__ VA_ARGS__再次引用宏本身中的变量参数。
#define DEBUG(...) printString (__VA_ARGS__)
^ ^
+-----<-refers to ----+
因此DEBUG("foo", "bar", "baz");
将被替换为printString ("foo", "bar", "baz")
点与__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.