在定义和调用函数宏时候, 要注意一些问题:
1, 我们经常用{}来引用函数宏被定义的内容, 这就要注意调用这个函数宏时的";"问题.
example_3.7:..._temp=1; 1=2; 2=_tmp};
明显后面的;是多余的, 我们应该这样调用: swap(1,2)
虽然这样的调用是正确的, 但它和C语法相悖, 可采用下面的方法来处理被{}括起来的内容:...: incr(a, 1, 10) /* increase a form 1 to 10 */
函数宏中的参数包括可变参数列表的情况
C99标准中新增了可变参数列表的内容...代表可变参数列表, 如果它不是仅有的参数, 那么它只能出现在参数列表的最后....调用这样的函数宏时, 传递给它的参数个数要不少于参数列表中参数的个数(多余的参数被丢弃).