我对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;
}发布于 2016-10-07 11:53:38
这里的问题是,您使用的是一个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更正代码。那么您就会得到原始代码的编译器错误。
发布于 2016-10-07 12:14:22
将x声明为双重类型
double rcall(double x)https://stackoverflow.com/questions/39916511
复制相似问题