gpt4 book ai didi

integer-promotion - C 函数调用中的参数提升

转载 作者:行者123 更新时间:2023-12-02 04:15:43 26 4
gpt4 key购买 nike

我从 ----关于默认提升何时开始:默认参数提升恰好在参数的预期类型未知时使用,也就是说,当没有原型(prototype)或参数是可变参数时。

但是一个让我困惑的例子是:

void func(char a, char b)
{
printf("a=%p,b=%p\n",&a,&b);
}

int main(void)
{
char a=0x11,b=0x22;

func(a,b);

return 0;
}

在上面的例子中很清楚:在main中调用func时,不需要提升参数a和b,但输出显示&a = &b +4而不是&a = &b+1。如果没有发生提升,为什么两个 CHAR 参数之间有 4 个字节?

最佳答案

因为编译器喜欢那样做:-)

您不能仅通过查看其地址来推断一个参数是否已被提升。不需要在堆栈上连续传递参数(或者甚至根本不需要在堆栈上传递参数)。

编译器(以及您平台的调用约定)可能指定堆栈始终保持 4 字节对齐,但这是特定于实现的细节,不是 C 语言标准的一部分。

关于integer-promotion - C 函数调用中的参数提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com