background image

Programowanie procesorów w języku C

dodatek “różnica między deklaracją a definicją”

Nazwy “deklaracja” i “definicja” były używane dość swobodnie. Jednak oba te słowa oznaczają w C dwa 

różne działania i warto wreszcie powiedzieć sobie dokładnie co one oznaczają.

Deklaracja:
Deklaracja określa pewne własności identyfikatora, jednak nie rezerwuje pamięci. Na przykład:

 

- informuje kompilator, że identyfikator  z1  oznacza zmienną typu int. Jednocześnie zaznaczono, że 

zmienna ta jest tworzona poza aktualnym plikiem źródłowym.

 

- informuje kompilator, że identyfikator tab jest tablicą elementów ośmiobitowych bez znaku.

 

- informuje kompilator, że identyfikator f jest funkcją zwracającą wartość typu int oraz nie przyjmującą 

żadnych argumentów.

Definicja:
Zajmuje pamięć dla obiektu oraz deklaruje () go. Na przykład:

 

-   tworzy   zmienna  z1,  zajmuje   dla   niej   pamięć   (dla   WinAVR   będą   to   dwa   bajty)   oraz   informuje 

kompilator, że identyfikator z1 oznacza zmienną typu int.

 

- tworzy zmienna z2, zajmuje dla niej pamięć, inicjuje ją wartością 0 oraz informuje kompilator, że 

identyfikator z2 oznacza zmienną typu int.

 

- tworzy tablicę tab, zajmuje dla niej pamięć (10 bajtów) oraz informuje kompilator, że identyfikator tab 

jest tablicą elementów ośmiobitowych bez znaku.

 

- tworzy funkcję f, zajmuje dla niej pamięć (pamięć ROM, umieszcza w niej program), oraz informuje 

kompilator,   że   identyfikator   f   jest   funkcją   zwracającą   wartość   typu   int   oraz   nie   przyjmującą   żadnych 
argumentów.

Podsumujmy skrótowo:
Deklaracja: Przypisanie własności do identyfikatora.
Definicja: Zajęcie pamięci dla obiektu oraz definicja.

Wersja przeznaczona do bezpłatnego udostępnienia poprzez stronę 

www.elportal.pl

 (

www.elportal.com.pl

, 

www.edw.com.pl

). Jeśli 

pobrałeś ten plik z innego miejsca – proszę, poinformuj mnie o tym:  

radoslaw.koppel@elportal.pl

. Jeśli chcesz umieścić ten plik na 

swojej stronie lub masz jakieś uwagi – skontaktuj się ze mną.

-1/1-

 

extern

 

int

 

z1;

 

extern

 

uint8_t tab[];

 

int

 

f(

void

);

 

int

 

z1;

 

int

 

z2 = 

0

;

 uint8_t tab[

10

];



int

 

f(

void

)

{

return

 

0

;

}