2012-10-29 24 views
5

Po dwóch latach C# spróbowałem C i mam kilka błędów "noob".Nie znaleziono identyfikatora?

Próbowałem odwrócić tablicę z rekursji i mam ten błąd:

error C3861: 'Rekurzija' indentifer not found

To jest mój kod:

#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); 
} 
+1

@irabaxter: edytowałeś literówkę w tytule z inną literówką :) – Wug

+0

@Wug: Glad * ktoś * zwraca uwagę. Dzięki. –

Odpowiedz

5

W C trzeba mieć prototyp funkcji wymienionych wcześniej funkcji to się nazywa.

Więc należy dodać następujące po dokonaniu obejmuje:

int Rekurzija(int niz);

Uwaga, bez konieczności prototyp, rzeczy wciąż może działać; kompilator podejmie próbę odgadnięcia prototypu, ale problemy pojawią się, jeśli przypuszczenie będzie inne niż to, czym naprawdę jest twoja funkcja.

6

W języku C wszystko musi zostać zadeklarowane przed użyciem. Więc trzeba dodać deklarację dla Rekurzija przed głównym:

int Rekurzija(int); 

To właśnie informuje kompilator, że gdy widzi wezwanie Rekurzija później, że jest to wywołanie funkcji biorąc int i powrocie int. To wszystko, co musi obsłużyć wywołanie, definicja może znajdować się gdzie indziej, na przykład poniżej głównej, lub nawet w innym pliku, co jest bardzo powszechne (delaracja w pliku .h i definicja w pliku .c) .

+0

haha ​​to DZIAŁA !!! Dziękuję .. :) – DocNet

+0

Bez problemu. Pamiętaj o zamknięciu pytania po zakończeniu (tzn. Zaznaczeniu jednego z rozwiązań). – amaurea

1

W języku C należy zadeklarować jednostki przed ich odniesieniem.

Trzeba dodać:

int Rekurzija(int niz); 

aby poinformować kompilator, że Rekurzija istnieje i jakie właściwości stało (np, jest to funkcja z int argumentów i wyniku) jako „do przodu” deklaracją poprzedzające twoją główną funkcję.