为什么stdarg.h中的第一个arg是一个寄存器?

时间:2011-01-10 12:37:07

标签: c gcc centos

stdarg.h警告说:

  

警告:第一个arg在寄存器中,   stdarg.h无法取其地址

为什么第一个参数将存储在寄存器中?

1 个答案:

答案 0 :(得分:2)

一些调用约定(例如fastcall)传递寄存器中的前几个参数,而不是将它们放在堆栈中。但是,这使得获取这些变量的地址变得不可能,并且大多数可变函数的实现依赖于此。因此,编译器可能另外将参数放在堆栈上以及寄存器中,或者对可变参数函数使用不同的调用约定。