gpt4 book ai didi

c - 如果函数是 K&R 风格定义的参数类型转换

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:04 24 4
gpt4 key购买 nike

即使函数是以 K&R 风格定义的,我也希望参数的类型转换应该发生。但是,测试程序的输出是:

int 9.42
int 2.97005e-12
flt 9.42
flt 9.42

似乎 int 值没有转换为 double。为什么?

#include <stdio.h>

double mult_pi_usual(double v) {
return v * 3.14;
}

double mult_pi_KR(v)
double v;
{
return v * 3.14;
}

int main() {
printf("int %g\n", mult_pi_usual(3));
printf("int %g\n", mult_pi_KR(3));
printf("flt %g\n", mult_pi_usual(3.));
printf("flt %g\n", mult_pi_KR(3.));
}

最佳答案

作为声明,K&R 风格不传递类型信息以在调用点进行检查。

考虑这样一个事实,即 K&R 函数声明(例如在 header 中)

double mult_pi_KR();

并且 double v 仅在函数定义中可见。

为了跨编译单元的一致性(并非所有编译单元都可以看到完整的函数定义),调用函数时不检查参数的类型。

在您的示例中,这意味着编译器 - 在 CALLED 中函数所在的位置 - 不知道 mult_pi_KR() 接受 double。所以 mult_pi_KR(3) 不会将 3 提升为 double

int 传递给需要 double 的函数的结果实际上是未定义的行为。

关于c - 如果函数是 K&R 风格定义的参数类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567939/

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