|
这个函数定义在stdarg.h中:
9 #define_va_rounded_size(TYPE) \
10 (((sizeof(TYPE) + sizeof(int) -1 ) / sizeof(int) * sizeof(int))
......
13 #define va_start(AP, LASTARG) \
14 (AP = ((char *)&(LASTARG) +_va_rounded_size(LASTARG)))
书中的注释说这个函数使AP指向传给函数的可变参数表的第一个参数.
我看到对这个函数调用时,AP和LASTARG都对应char*.我自己是这样理解这个函数的:
LASTARG是一个指向字符的指针,一个占用了4字节存储另一个变量的地址的变量,则
&(LASTARG)为取这个指针变量本身的地址,
(char*)&(LASTARG)使它仅对上述地址中的一个字节考虑,
另外,_va_rounded_size(LASTARG)经编译后是一个常量,为4
所以,最后,AP指到了LASTARG本身地址的下一个字节,实际上这里并没有明确定义,也就不可知.
这与书本中的注释根本不是一个意思.
请问,我哪理解错了.(我是一个新手,还请详细指点)
非常感谢! |
|