1

私は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;
}
4

2 に答える 2

3

使用する前に宣言していないmultため、コンパイラは暗黙的に として宣言しますint mult()。次に、コンパイラは定義を見つけますが、一致しません。

の前にプロトタイプを追加してみてくださいmain():

double mult(double, double);

または、前に定義してmain()ください。

于 2013-10-23T03:22:42.663 に答える
2

いくつかの問題があります.1つは宣言される前に使用しようとしています.1つの修正は、次のように前にmult宣言することです:multmain

double mult(double x, double y) ;

そうしないと、C pre - C99はこのように暗黙的に定義しmult、Keith が指摘するようにC99 では制約違反になります。の最新バージョンでは、次の警告が表示されます。mainmultint mult()clang

関数 'mult' の暗黙の宣言は C99 では無効です

暗黙的に宣言されていることをgcc警告するだけなので、型の競合が発生します。multまた、ここで引数を 1 つだけ指定して呼び出そうとしています。

answer = mult(number1);

ただし、2 つの引数を取るように定義されています。最後に、number1初期化せずに使用しています。つまり、不確定な値になります。

于 2013-10-23T03:23:58.963 に答える