【问题标题】:Conflicting types in CC 中的冲突类型
【发布时间】:2012-10-13 03:39:13
【问题描述】:

我试图用 C 语言构建一个从函数返回浮点值的非常简单的程序,但由于某种原因,我遇到了错误。

#include<stdio.h>
int main(){
    double returning;
    returning = regre();
    printf("%f", returning);
    return 0;
}
double regre(){
    double re = 14.35;
    return re;
}

出现的错误是:

'regre' 的冲突类型

regre 的先前隐式声明在这里

【问题讨论】:

  • 如果我将 regre 函数中的 doble 替换为 int 类型,程序运行...但我需要从函数返回一个 double。
  • 你应该在使用前声明函数。
  • 注意:可能与您的想法不同,double regre() 使用未定义数量的未知类型的参数创建一个函数。查看stackoverflow.com/questions/693788/c-void-arguments

标签: c


【解决方案1】:

该错误消息准确地告诉您正在发生的事情 - 有一个隐式声明 regre,因为您直到 main() 之后才定义它。只需添加一个前向声明:

double regre();

main() 之前,或者只是将整个函数移到那里。

【讨论】:

  • 非常感谢!我不知道!这是我在 c 中使用函数的第一个程序...谢谢!!!
  • @elizabeth - 如果您是初学者,而且听起来确实像,您可能想查看clang/LLVM。来自 clang 的错误消息比大多数编译器要好得多,这将帮助您入门。
【解决方案2】:
previous implicit declaration of `regre` was here

如果函数未知,则编译器默认将其视为int functionname()。在您的情况下,int regre() 将在此处声明。

conflicting types for 'regre' 

当注意到你的实际函数double regre() 时,就会出现这个冲突错误。为了解决这个问题,应该在实际使用之前声明双 regre() 函数。

#include<stdio.h>
double regre(); //Forward Declaration
int main(){
    double returning;
    returning = regre();
    printf("%f", returning);
    return 0;
}
double regre(){
    double re = 14.35;
    return re;
}

有关前向声明的更多信息,请参阅以下链接。

http://en.wikipedia.org/wiki/Forward_declaration

【讨论】:

    【解决方案3】:

    在 C 中,每当您通过按值调用或按引用调用来使用函数时,这些函数默认为 int 类型。当您使用任何类型的函数时,您需要在调用该函数之前在程序中定义函数原型。 最好的方法是在 main it self 之前定义所有函数原型,这是编程的好方法。 进入您的程序只需将原型定义为 double regre();主要之前

    double regre();
        main()
          {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多