可变参数函数宏的实现

1 #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )  
2 #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) //第一个可选参数地址  
3 #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址  

上面定义的三个宏在可变函数参数的时候用的到

下面解释下第三个

这里注意下括号ap += _INTSIZEOF(t))这里改变ap

这里((ap += _INTSIZEOF(t)) - _INTSIZEOF(t))不改变ap只改变返回值

具体的例子这里不再列举,这点理解了,其他应该不难

原文地址:https://www.cnblogs.com/cdwodm/p/2964223.html