gpt4 book ai didi

c - c 中带有 double 的函数有不同的语法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:59 25 4
gpt4 key购买 nike

我是 C 语言编码的新手,所以我确定这是一个基本问题。在我看来,这段代码应该读取一个输入,运行什么都不做的 rcall(),然后输出相同的值。这与 int() 值完美配合,但只要我切换到 double,输出就不会从 -6158 改变。如何解决这个逻辑错误?

    double input, output, rcall(x);

int main(void){
scanf("%lf", &input); /*read the input*/
output=rcall( input); /*call the function*/
printf("%lf", output); /*print the output*/
}

double rcall(x){ /*this function does nothing*/
return x;
}

最佳答案

这里的问题是您使用的是 17 年前的编译器,或者您当前的编译器配置不正确以编译代码,就好像它是 17 年前的代码。

声明 double rcall(x); 在现代 C 中是无稽之谈。

但古老的 C 语言允许在未指定所有类型的情况下草率声明,甚至允许您调用没有声明的函数。然后,编译器将始终“有帮助地”假定那些未明确指定的类型都是 int。如果事实证明它们实际上不是,那么您的程序就会崩溃并烧毁。

这个愚蠢的系统在 1999 年以“C99”标准从 C 语言中删除。在现代 C 中,您的声明应该是

double rcall (double x);

定义应该是

double rcall (double x)
{
return x;
}

如果您使用的是 GCC,您可以通过添加选项 gcc -std=c11 -pedantic-errors 将其配置为根据现代标准 C 更正代码。那么你会得到原始代码的编译器错误。

关于c - c 中带有 double 的函数有不同的语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916511/

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