6

次のプログラムでは、2 つの関数 prd() と display() を使用しています。どちらも main() で呼び出す前に main() の前に宣言しておらず、両方とも main() の後に定義しています。 ) は main() 内でスムーズに動作し、display() を呼び出すと、「「display」の以前の暗黙の宣言はここにありました」という警告が表示されます。 ?そもそもどちらも宣言していません。一方の呼び出しによる警告はまだありますが、もう一方は正常に動作します。

    #include<stdio.h>

    int main()
    {
        int x=8,y=11;

        printf("The product of %d & %d is %d",x,y,prd(x,y));

        display();

        return 0;
    }

    int prd(int x,int y)
    {
        return x*y;
    }

    void display()
    {
        printf("\n Good Morning");
    }

PS: そして、この二次的な質問に答えていただければ本当にありがたいです-「定義がある場合、Cでは関数宣言はまったく必要ありませんか?」.私は、プログラムのすべての関数をメインの前に宣言する習慣があります。 () 関数、そして main() 関数の後にそれらを定義します。私は間違っていますか?

4

3 に答える 3

9

undeclared を使用するとdisplay()、コンパイラは、それが を返すかのように暗黙的に宣言しintます。

コンパイラが最終的に の定義をdisplay()確認すると、戻り値の型がvoidであることがわかりますが、既に想定されているintため、定義と暗黙の宣言が異なるため、エラー/警告が発生します。

于 2013-04-02T04:42:32.673 に答える
4

エラーが発生するのは、C が戻り値の型を持つすべての開始されていない関数を考慮するためですint。関数displayは後でvoid戻り値の型で定義されます。

の戻り値の型を に変更すると、警告が削除display()されます。int

于 2013-04-02T04:43:50.353 に答える
2

デフォルトでは、コンパイラは、宣言されていない関数が を返すと想定しますint

これはあなたの関数には当てはまりますが、その としてprd一致しません。これにより、コンパイラは警告を発します。display()void

2つ目は、常に関数を宣言するのが適切です。

于 2013-04-02T04:44:31.277 に答える