C/C++可变参数

★函数:

使用VA_LIST宏组解决变参问题

         1、首先定义va_list型的变量,这个变量是指向参数的指针。

         2、然后用va_start宏初始化刚定义的va_list变量,这个宏的第二个参数是“第一个可变参数的前一个参数”
         3、再用va_arg得到可变参数,第二个参数是“可变参数”的类型
         4、最后用va_end宏结束可变参数的获取。如果有多个可变参数,依次调用va_list获取各个参数

 

使用VA_LIST应该注意的问题:

        1、可变参数函数,必须通过某种方式事先预知传入参数的类型。可变参数函数的调用者,必须按照该方式传入对应类型的参数。一旦参数类型不匹配,将可能导致返回错误或无意义的数据,甚至栈被破坏。
        2、编译器对可变参数的函数的原型检查不够严格,不利于写出高质量代码。在非必要情况下,应当尽量采用C++重载、多态等方式实现函数,而尽量不要使用可变参数。

 

★宏

宏也可以带可变参数,如:

#define PRINT( format, ... )   printf( format, ## __VA_ARGS__ );

“##”不可以省略,如果省略,就不可以省略可变参数部分。比如:“PINTF("hello");”,无可变参数部分,解释PRINT宏时就会多出一个“,”号,导致编译出错。

或者可以这样定义:

#define PRINT( format, args... ) printf( format, ##agrs );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

示申○言舌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值