czwartek, 10 lutego 2011

Kurs C: Funkcje - deklaracja


Autor: Dondu

Kurs języka C: Spis treści

Gdy kompilator przygotowuje wynikowy kod maszynowy, może zaprotestować napotykając się na użycie funkcji, która nie została jeszcze zdefiniowana. W szczególności ten przypadek może się zdarzyć, gdy definiujesz funkcję w dalszych liniach kodu niż funkcję ją wywołującą.

W takiej sytuacji należy wcześniej poinformować kompilator, że taka funkcja istnieje. Robimy to za pomocą deklarowania funkcji. Deklarowanie funkcji polega na przekopiowaniu pierwszej linijki funkcji i zakończeniu jej średnikiem.

W poniższym przykładzie pokazałem, co jest deklaracją, a co definicją funkcji obliczenia().

Przykład 1 (w kompilatorze)
//deklaracja funkcji
int obliczenia(int a, int b, int c);


//program zaczyna się od funkcji main()
int main(void)
{
  
  //oblicz i wdrukuj
  printf( "a*b+c = %d \n", obliczenia(5, 23, 9) );

  return 0;  //zakończ wykonywanie programu
}


//definicja funkcji
int obliczenia(int a, int b, int c){
  return a*b+c;
}


Ale kompilator czasami protestuje:

implicit declaration of function
(niejawna deklaracja funkcji)

Jeżeli w trakcie kompilacji natkniesz się na warning o treści:

warning: implicit declaration of function ‘JakasFunkcja’

to właśnie oznacza problem braku deklaracji funkcji.

Poniżej przykład programu, który wygeneruje taki właśnie warning.

Przykład 2 (w kompilatorze)
//deklaracja funkcji
//char JakasFunkcja(int a);
  
int main()
{
 
  int z;
  for(z=0; z<10; z++){
     JakasFunkcja(z);
  }
 
  return 0;
}
 
//definicja funkcji
char JakasFunkcja(int a){
   printf( "%d \n", a);
}

W CManiak'u w powyższym przykładzie znajdziesz zakomentowaną deklarację funkcji. Usuń komentarz, a przekonasz się, że kompilacja przebiegnie poprawnie.

Warningi trzeba eliminować!
Więcej na ten temat przeczytasz tutaj: Błędy kompilacji programu


Kurs języka C: Spis treści

35

Brak komentarzy:

Prześlij komentarz