如何实现宏的变参

在开发自动化测试工具的时候,有个需求需要实现宏的变参,但是找到很多资料,说是VC6的编译器不支持这个新的特性。

只有C99编译器标准可以改变了这种局面,它允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏。可变参数宏就像下面这个样子:

#define trace(…)   testrace(__VA_ARGS__)

缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。当宏的调用展开时,实际的参数就传递给 testrace ()

 

仔细一想,是不是没有办法呢?其实如然,我们可以使用一个稍微变通道办法来实现宏大变参。

具体实现如下:

void WINAPI test_case_delay(long lTime, ...)

{

……

}

 

#define TEST_CASE_DELAY  ::test_case_delay

那么这个时候我们define的并不是一个函数的定义,而是一个函数的指针

当你写

TEST_CASE_DELAY”Test”,”Test”);

编译器在编译的时候,会将TEST_CASE_DELAY替换成函数的地址,那么这样可以巧妙的是来实现 宏变参的实现

当然来,严格的来说,也许不能说这是宏变参,但是可以启到同样的效果。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值