LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 997|回复: 0

kernel 0.11 中的一个具体函数va_start()

[复制链接]
发表于 2005-11-30 18:57:44 | 显示全部楼层 |阅读模式
这个函数定义在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本身地址的下一个字节,实际上这里并没有明确定义,也就不可知.
这与书本中的注释根本不是一个意思.

请问,我哪理解错了.(我是一个新手,还请详细指点)

非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表