gcc(x64)如何处理可变函数中的类型/大小?

gcc(x64)如何处理可变函数中的类型/大小?,c,gcc,variadic,C,Gcc,Variadic,一个变分函数与main() 如何实现?在linux x64上,变量函数的参数被“提升”为64位值,因此在此平台上无需显式转换为64位值。使其工作的基本代码位是 x = va_arg(ap, long); 如果换成其他类型,你可以很好地射中自己的脚 char ch = va_arg(ap, char); 根据目标体系结构的规则,每次访问后,这可能会将ap增加1、2、4或8。但f()会传递ints(x64上为32位)。我刚刚因为在这里询问32位到64位的“升级”而被打了个电话。逻辑上,ap会增加

一个变分函数与main()


如何实现?

在linux x64上,变量函数的参数被“提升”为64位值,因此在此平台上无需显式转换为64位值。

使其工作的基本代码位是

x = va_arg(ap, long);
如果换成其他类型,你可以很好地射中自己的脚

char ch = va_arg(ap, char);

根据目标体系结构的规则,每次访问后,这可能会将ap增加1、2、4或8。

但f()会传递ints(x64上为32位)。我刚刚因为在这里询问32位到64位的“升级”而被打了个电话。逻辑上,ap会增加(sizeof long)或(sizeof char)-但我知道情况并非如此
x = va_arg(ap, long);
char ch = va_arg(ap, char);