1
#define RAND_MAX 10
#include<stdio.h>
int main()
{
  double x;
  x=randRange(-1.0,1.0);
  printf("x value is %f::",x);
  return 0;
}

double randRange(double min, double max)
{
  return rand() * (max - min) / RAND_MAX + min;
}

エラー::以下のスニペットは、生成されたエラーです--

$gcc main.c -o demo -lm -pthread -lgmp -lreadline 2>&1
main.c:11:8: error: conflicting types for 'randRange'
double randRange(double min, double max) {
^
main.c:6:5: note: previous implicit declaration of 'randRange' was here
x=randRange(-1.0,1.0);
^

競合する型のエラー??戻り値の型を確認しました。

4

4 に答える 4

5

関数が呼び出されるポイントの上で関数を宣言する必要があります。

double randRange(double min, double max);

int main()
{
    double x;
    x=randRange(-1.0,1.0);
    ...

double randRange(double min, double max)
{

そうしないと、ansi C は、関数を返すための暗黙の宣言を提供します。int

于 2013-10-07T15:57:49.483 に答える
1

randRange定義される前に使用するためです。定義を使用する場所の上に移動するか、事前にプロトタイプ (宣言) を作成します。

呼び出すときに宣言されていない関数は、デフォルトで return になりintます。このデフォルトの宣言は、エラー メッセージの「暗黙の宣言」が意味するものです。

于 2013-10-07T15:58:12.037 に答える
1

の暗黙の宣言は、randRangeそれを として宣言しint (*)(float, float)ます。

この種のエラーを回避するには、常に関数を事前に宣言してください。置くだけ

double randRange(double min, double max);

あなたの上にmain

于 2013-10-07T15:58:51.130 に答える
0

「古い」C コンパイラを使用している (または最新のコンパイラを「古い」C89/90 モードで実行している) 必要があります。準拠している最新の C コンパイラ (C99 以降) では、関数が宣言される前に関数randRangeを使用しようとしているため、コードは通常、関数の最初の呼び出しの時点でコンパイルに失敗します。randRangeこれは、現代の C では違法です。

古い C (C89/90) では、宣言されていない関数を呼び出すことは合法です。randRangeasを呼び出そうとすると、コンパイルは、それが 2 つのパラメーターをrandRange(-1.0,1.0)持ち、 を返す関数でなければならないと暗黙のうちに結論付けます。関数が実際に異なって定義されている場合、プログラムの動作は未定義です。doubleint

これはまさにあなたの場合に起こったことです。コンパイラが「さらに一歩進む」ことを決定し、この種の暗黙的な宣言の競合がある関数に対してエラーを報告したことを除いて (動作が未定義のプログラムを静かに生成するのではなく)。

于 2013-10-07T16:20:35.400 に答える