可变参数函数宏的实现
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只改变返回值
具体的例子这里不再列举,这点理解了,其他应该不难