-3

私のコードの何が問題なのか、本当にわかりません。私は以前に非常に似たようなことをしましたが、コンパイルエラーは発生しませんでした。私はコードをもっている:

double shape(int i,double x)
{
    double fun,h,L;
    int n;
    n=100;
    L=1.0;
    h=L/n;
    x=x-i*h;
    x=fabs(x);
    if(x<=h)
    fun=(1.0-x/h);
    else
    fun=0.0;
    return fun;
}

void main()
{
    int N=101;
    double O,F,h;
    h=0.001;
    for(int i=0;i<N;i++)
    {
        F=h*(i+1);
        O=shape(i,F);
    }
}

そして、最後の行でコンパイルエラーが発生します: エラー: 'unsigned int' が見つかり、二重の警告が必要です: プロトタイプがありません。なぜ?

4

1 に答える 1

0

エラー: 'unsigned int' が見つかりましたが、double が必要です 警告: プロトタイプがありません。

これは、プロトタイプを持たない関数を呼び出していることを示しています。その場合、コンパイラはデフォルトの戻り値の型をunsigned int. 解決策は、不足しているプロトタイプを追加することです。

あなたが投稿したコードは不完全です。への呼び出しがshapeエラーを引き起こしているようです。しかし、shapeは明確に定義されています。ほとんどの場合、実際のコードshapeは別のファイルにあるか、最初に以下で宣言されていますmain

関数が宣言されていない場合、関数呼び出しを受け入れないようにコンパイラを構成する必要があります。C言語がそのようなことを受け入れるという事実は、言語の非常に初期の時代にまでさかのぼります。これらの古くからある悪い習慣を許可しないようにコンパイラを構成する必要があります。

プログラムをコンパイルすると、実行時にプログラムが失敗します。Fのループでオーバーフローしますmain

最後に、main関数が正しく宣言されていません。そのはず

int main(void)
于 2013-03-01T11:35:09.730 に答える