5

2年間のC#の後、Cを試しましたが、「noob」エラーが発生しました。

再帰を使用して配列を逆にしようとしましたが、次のエラーが発生します:

エラーC3861:「Rekurzija」識別子が見つかりません

これは私のコードです:

#include "stdafx.h"
#include "stdio.h"

int main()
{
    int niz[] = {1,2,3,4,5,6};
    int duzina = sizeof(niz)/sizeof(int);
    printf("%s",niz[Rekurzija(duzina)]);
    getchar();
}

int Rekurzija(int niz)
{
    int i = sizeof(niz)/sizeof(int);
    while(i!=0)
        return Rekurzija(i-1);
}
4

3 に答える 3

6

Cでは、使用する前にすべてを宣言する必要があります。したがって、mainの前にRekurzijaの宣言を追加する必要があります。

int Rekurzija(int);

これは、後でRekurzija呼び出しを検出したときに、それがintを取り、intを返す関数呼び出しであることをコンパイラーに通知するだけです。呼び出しを処理するために必要なのはそれだけです。定義は、非常に一般的なように、メインの下、または別のファイルなど、別の場所に置くことができます(.hファイルでの削除と.cファイルでの定義) 。

于 2012-10-29T20:27:25.887 に答える
5

Cでは、それを呼び出す関数の前に関数プロトタイプをリストする必要があります。

したがって、インクルードの後に​​以下を追加する必要があります。

int Rekurzija(int niz);

プロトタイプがなくても、うまくいく可能性があることに注意してください。コンパイラはプロトタイプを推測しますが、推測が実際の関数と異なる場合は問題が発生します。

于 2012-10-29T20:26:45.297 に答える
1

Cでは、エンティティを参照する前にエンティティを宣言する必要があります。

追加する必要があります:

int Rekurzija(int niz);

Rekurzijaが存在すること、およびメイン関数の前にある「前方」宣言としてRekurzijaが持つプロパティの種類(たとえば、int引数と結果を持つ関数)をコンパイラーに通知します。

于 2012-10-29T20:28:15.803 に答える