Dan*_*Dan 13 c variables arguments
几天前我参加了一次技术面试,有人问我C编译器的implments如何使用可变数量的参数?它是如何通过堆栈的?
有谁知道或可以探索那个?
谢谢,丹
sta*_*ica 10
据我所知,用C ......
调用函数按从右到左的顺序将参数压入堆栈.
调用者负责在执行被调用函数后从堆栈中删除参数.这可能正是因为调用者保证知道它放在堆栈上的参数多少,而被调用的函数可能会错误.
PS: 调用约定通常是特定于实现的.我刚刚描述的内容被称为"cdecl"调用约定.将此与通常称为"stdcall"的调用约定进行对比,其中被调用函数负责从堆栈中删除其参数.因此,它不支持可变长度参数列表.
PPS:正如用户nategoose评论的那样,我没有提到实际使用的变量参数列表.有关详细信息,请参阅标题的POSIX文档<stdarg.h>
.