在开发自动化测试工具的时候,有个需求需要实现宏的变参,但是找到很多资料,说是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替换成函数的地址,那么这样可以巧妙的是来实现 宏变参的实现
当然来,严格的来说,也许不能说这是宏变参,但是可以启到同样的效果。