奇怪/简单的C错误

时间:2013-10-23 03:20:38

标签: c function types double

我刚开始尝试学习C并且有一个非常基本的问题。下面列出的代码从mult函数输出一个错误,指出存在'mult'的冲突类型

我看不出有任何冲突的类型。如果我要将这些值的数据类型替换为int,那么我没有任何问题。我假设我错过了很简单的东西。有什么帮助吗?

#include <stdio.h>

int main()
{
    double number1;
    double answer;

    answer = mult(number1);

    getchar();
    return 0;
}

double mult(double x, double y)
{
  return x * y;
}

2 个答案:

答案 0 :(得分:3)

在您使用之前,您尚未声明mult,因此编译器会隐式将其声明为int mult()。然后编译器找到你的定义并且它不匹配。

尝试在main()之前添加原型:

double mult(double, double);

或者只是在main()之前定义它。

答案 1 :(得分:2)

有一些问题,一个是你在宣布之前尝试使用mult,一个解决方法就是在mult之前转发声明main,如下所示:

double mult(double x, double y) ;

或仅在mult之前定义main,否则 C pre- C99 将隐式定义mult,如此{{1}和 C99 一样,Keith指出它是一个约束违规。 int mult()的最新版本会警告您:

  

函数'mult'的隐式声明在C99中无效

clang会警告你它被隐式声明,这就是你收到类型冲突的原因。您还尝试在此处仅使用一个参数调用gcc

mult

但它被定义为采用两个参数。最后,您使用answer = mult(number1); 而不初始化它,这意味着它将具有不确定的值。