例如,在参考文献中:
type va_arg (va_list ap, type)
< p>“ap”代表参数指针吗?还是其他意思?< /p>
type va_arg (va_list ap, type)
< p>“ap”代表参数指针吗?还是其他意思?< /p>
这实际上是一个很容易回答的问题。
ap
代表着参数指针。
引用自The C Programming Language,第二版,Brian W. Kernighan和Dennis M. Ritchie:
7.3 可变长度的参数列表
[...] 类型va_list用于声明一个变量,该变量将依次引用每个参数;在minprintf中,此变量称为ap,表示"参数指针"
va_list
并不一定是指针类型;它只是在抽象意义上的“指针”。 - Keith Thompsonap
代表参数指针。实际上,有时它被缩写为arg_ptr
:
type va_arg(
va_list arg_ptr,
type
);
(注:本翻译为技术文档专用,可能不适合普通日常交流使用)
type
- 要检索的参数类型。arg_ptr
- 指向参数列表的指针。
ap
而没有解释”的问题:我也是这样。很高兴知道用户ouah找到了答案。 - pmor这实际上是一个难以回答的问题。
请参见ouah's answer; 在K&R2中提到了“argument pointer”这个短语。
<stdarg.h>
头文件是由ANSI C标准在1989年引入的。 ANSI C Rationale没有显示任何示例,并且没有使用名称ap
或arg_ptr
。标准本身(最新草案在此处)在示例中使用名称ap
,但没有解释它。
我一直没有找到关于名称ap
的解释。它可能最初代表“参数指针”,但也很重要的是要注意类型va_list
不是(必然)指针类型。例如,在gcc中,它被定义为__builtin_va_list
,这是由编译器直接实现的类型。(在我的系统上,它恰好有24个字节的大小,但那并不是特别有用的信息——除了在该实现中它不是指针)。
底线:名称ap
是va_list
对象的惯用名称,原因我们无需关心。