C示例中的'ap'代表什么?

8
例如,在参考文献中:
type va_arg (va_list ap, type)
< p>“ap”代表参数指针吗?还是其他意思?< /p>

2
它实际上代表着“作者[已经]石化”。在20世纪70年代或之前的代码中是可以接受的,但今天很难辩解。 - Jerry Coffin
1
"ap代表参数指针吗?" 可能是的。这只是一个变量名,所以它可能代表作者命名后的任何东西。 - P.P
好的。感谢您提供的样式建议。 - user3761340
@user2864740 别太认真了,老人家信仰坚定 :) - this
@this:我更倾向于使用读者可以更容易理解的名称。 - Jerry Coffin
显示剩余4条评论
3个回答

11

这实际上是一个很容易回答的问题。

ap代表着参数指针

引用自The C Programming Language,第二版,Brian W. Kernighan和Dennis M. Ritchie:

7.3 可变长度的参数列表

[...] 类型va_list用于声明一个变量,该变量将依次引用每个参数;在minprintf中,此变量称为ap,表示"参数指针"


1
不错的发现!很有可能是Dennis Ritchie给那个变量命名的。 - Sergey Kalinichenko
2
很好的发现。但需要注意的是,va_list并不一定是指针类型;它只是在抽象意义上的“指针”。 - Keith Thompson

6

ap代表参数指针。实际上,有时它被缩写为arg_ptr

type va_arg(
   va_list arg_ptr,
   type 
);
  • type - 要检索的参数类型。
  • arg_ptr - 指向参数列表的指针。
(注:本翻译为技术文档专用,可能不适合普通日常交流使用)

2
也许吧,但C标准或ANSI C Rationale中都没有对此提供支持。它们只是使用名称“ap”而没有解释。值得注意的是,va_list不一定是指针类型。 - Keith Thompson
1
@KeithThompson,在 K&R2 中有支持,可以看看我的回答。 - ouah
@KeithThompson 关于“两者都只是使用名称ap而没有解释”的问题:我也是这样。很高兴知道用户ouah找到了答案。 - pmor

2

这实际上是一个难以回答的问题。

请参见ouah's answer; 在K&R2中提到了“argument pointer”这个短语。

<stdarg.h>头文件是由ANSI C标准在1989年引入的。 ANSI C Rationale没有显示任何示例,并且没有使用名称aparg_ptr。标准本身(最新草案在此处)在示例中使用名称ap,但没有解释它。

我一直没有找到关于名称ap的解释。它可能最初代表“参数指针”,但也很重要的是要注意类型va_list不是(必然)指针类型。例如,在gcc中,它被定义为__builtin_va_list,这是由编译器直接实现的类型。(在我的系统上,它恰好有24个字节的大小,但那并不是特别有用的信息——除了在该实现中它不是指针)。

底线:名称apva_list对象的惯用名称,原因我们无需关心。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接