【问题标题】:Why is the first arg in stdarg.h a register? [closed]为什么 stdarg.h 中的第一个 arg 是一个寄存器? [关闭]
【发布时间】:2011-01-10 21:34:42
【问题描述】:

stdarg.h 警告:

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

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

【问题讨论】:

  • 您的问题是具体实现,请注明操作系统和编译器。
  • 这取决于 ABI,而 ABI 又取决于您使用的 CPU 系列和操作系统。
  • stdarg.h 不会产生警告。根据您编译的一些代码,您的编译器会这样做。请发布代码,以及用于编译该代码的命令行。
  • @nos:看这里,文件底部的#warningkoders.com/c/…

标签: c gcc centos


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多