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

马谦马谦马谦 2018年9月14日23:28:29 发表评论
文章最后编辑于:2018-9-14 23:30:12

一、问题描述

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

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

编译时就会报错:

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

二、参数个数为0的问题

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

编译报错:

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

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

解决方案

__VA_ARGS__前面加上##,例如:

编译运行:

本文共执行42次查询,耗时0.301秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: