c 语言可变长参数传递问题

一、问题描述

C 语言中的函数提供了一种可变长参数机制,这个机制使得我们在操作的时候充分自定义自己的功能,例如使用最多的 printf 函数:

它的函数声明为:printf(const char *fmt, ...);,其中的... 就代表不固定的参数,使用起来十分方便。但是在函数嵌套的时候,不能直接使用... 来传递,例如代码

编译时就会报错:

如果要嵌套使用,需要通过宏__VA_ARGS__完成:

二、参数个数为 0 的问题

使用上面的方法,参数个数为 0 的时候编译也会报错:

编译报错:

原因是因为参数个数零,预编译后 main 函数里面的代码变成了:

可以看到:fprintf 函数的最后是"HelloWorld", );,最后一个逗号和括号之间没有数据,语法不通过。

解决方案

__VA_ARGS__前面加上 ##,例如:

编译运行:

发表评论