首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于c中有double的函数,有不同的语法吗?

对于c中有double的函数,有不同的语法吗?
EN

Stack Overflow用户
提问于 2016-10-07 11:48:27
回答 2查看 59关注 0票数 0

我对C语言的编码很陌生,所以我确信这是一个基本的问题。在我看来,这段代码应该读取一个输入,运行什么都不做的rcall(),并输出相同的值。这对于int()值非常有效,但是一旦我切换到double,输出就不会从-6158改变。如何修正这个逻辑错误?

代码语言:javascript
复制
    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;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-07 11:53:38

这里的问题是,您使用的是一个17年前的编译器,或者您的当前编译器被错误地配置为编译代码,就好像它比17年老了一样。

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

但是古C允许草率的声明,其中没有指定所有类型,甚至允许您调用没有声明的函数。然后编译器将总是“有帮助地”假设那些没有显式指定的类型都是int。如果事实证明它们实际上不是,那么您的程序就会崩溃和烧毁。

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

代码语言:javascript
复制
double rcall (double x);

定义应该是

代码语言:javascript
复制
double rcall (double x)
{
  return x;
}

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

票数 3
EN

Stack Overflow用户

发布于 2016-10-07 12:14:22

将x声明为双重类型

代码语言:javascript
复制
   double rcall(double x)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39916511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档