在头文件stdarg.h中定义的函数va_start()有两个参数va_list ap和parmN这里parmN是命名函数定义中变量参数列表中最右边参数的标识符(在...之前的那个)。 ..)。在这里,我不明白为什么说它不能用寄存器存储类声明。
答案 0 :(得分:1)
首先,va_start
is a macro, not a function。
本子条款中描述的
va_start
和va_arg
宏应实现为宏,而不是函数。
现在,在此之后,C99 rationale回答了您的问题:
对
parmN
参数声明的限制遵循允许此类实现的意图,因为将&
运算符应用于参数名称可能不会产生预期结果(如果参数的声明)没有达到这些限制。
总之,标准委员会希望为C标准库提供使用&
运算符实现可变参数的自由,如果parmN
具有register
存储持续时间,那么标准由于违反section 6.5.3.2, paragraph 1:
一元
&
运算符的操作数应该是函数指示符,[]
或一元*
运算符的结果,或者是指定不是对象的对象的左值位字段,不使用register
存储类说明符声明。