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

时间:2016-10-07 11:48:27

标签: c function syntax double

我是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;
    }

2 个答案:

答案 0 :(得分:3)

这里的问题是您使用的是一个17岁的编译器,或者您当前的编译器配置错误,无法编译代码,就好像它已超过17年一样。

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

但古代C允许草率声明,其中并未指定所有类型,甚至允许您调用没有声明的函数。然后,编译器将永远"帮助"假设那些未明确指定的类型都是int。如果事实证明它们实际上并非如此,那么您的程序将会崩溃并烧毁。

这个纯粹的愚蠢系统在1999年从C语言中被删除,其中包括" C99"标准。在现代C中,您的声明应该是

double rcall (double x);

,定义应为

double rcall (double x)
{
  return x;
}

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

答案 1 :(得分:0)

将x声明为双重类型

   double rcall(double x)