ANSI C 8

ANSI C 8



4 FUNKCJE I STRUKTURA PROGRAMU

Jest jeszcze jedna rzecz, o którą należy się zatroszczyć - wspólne definicje i deklaracje dla wszystkich plików. Chcemy je wszystkie zgromadzić w jednym miejscu tak, aby występowała tylko jedna kopia każdej z nich, teraz i w przyszłości, kiedy będziemy rozwijać program. A zatem te wspólne dane umieścimy w pliku nagłówkowym o nazwie calc.h i będziemy go włączać w razie potrzeby. (Wiersz #include jest dokładniej opisany w p. 4.11.) Program wynikowy wygląda więc tak, jak to pokazano na str. 117.

Występuje pewna sprzeczność między wymaganiem, aby z każdego pliku źródłowego mieć dostęp jedynie do tych informacji, które są niezbędne do działania, a praktycznym realizmem, z którego wynika, że trudniej jest utrzymywać porządek w wielu plikach nagłówkowych. Do pewnego średniego rozmiaru programu prawdopodobnie najlepszą metodą jest opracowanie jednego pliku nagłówkowego, w którym mieści się wszystko to, co może być wspólne dla dowolnych dwóch części programu; taką właśnie decyzję podjęliśmy w naszym przykładzie. Dużo większe programy wymagają więcej prac organizacyjnych i większej liczby nagłówków.

t


Zmienne statyczne

Zmienne sp i val w pliku źródłowym stack.c oraz zmienne buf i bufp w pliku getch.c zdefiniowano na wyłączny użytek odpowiednich funkcji z tych plików źródłowych; nie zamierzano udostępnić ich innym funkcjom. Deklaracja static zastosowana do zmiennych zewnętrznych i funkcji ogranicza ich zasięg od miejsca wystąpienia do końca tłumaczonego pliku źródłowego. Deklarowanie zewnętrznych obiektów jako static jest więc sposobem na ukrycie ich nazw. Na przykład zmienne buf i bufp muszą być zewnętrzne, aby mogły być wspólne dla pary funkcji getch-ungetch, powinny jednak być niewidoczne dla użytkowników tych funkcji.

Pamięć statyczną określa się przez poprzedzenie normalnej deklaracji słowem kluczowym static. Jeśli obie funkcje i obie zmienne zostaną umieszczone w jednym pliku źródłowym, np.

static char buf[BUFSIZE]; /* bufor na zwroty z ungetch */ static int bufp = 0;    /* następne wolne miejsce w buf */

int getch(void) {...}

void ungetch(int c) (...)

to żadna inna funkcja nie będzie miała dostępu do zmiennych buf i bufp, a ich naz'*') nie będą kolidować z takimi samymi nazwami w innych plikach tego samego progf3'

4.7 ZMIENNE REJESTROWE

mTśioI


mu. W ten sam sposób można ukryć zmienne sp i val, z których push i pop przy obsłudze stosu: wystarczy zadeklarować je jako static.

Zewnętrzną deklarację static najczęściej stosuje się dó zmiennych, ale można ją także stosować do funkcji. Nazwy funkcji są zwykle globalne, widoczne dla wszystkich części całego programu. Jeśli jednak funkcję zadeklarowano jako Static, jej nazwa staje się niewidzialna poza plikiem zawierającym jej deklarację.

Deklarację static można również stosować do zmiennych wewnętrznych. Wewnętrzne zmienne statyczne są lokalne dla poszczególnych funkcji tak samo, jak zmienne automatyczne. Jednak w przeciwieństwie do automatycznych nie pojawiają się i nie znikają razem z wywołaniem funkcji, lecz istnieją między jej wywołaniami. To znaczy, że wewnętrzne zmienne static stanowią prywatną, stałą pamięć wewnątrz pojedynczej funkcji.

Ćwiczenie 4.11. Zmień funkcję getop tak, aby nie potrzebowała funkcji ungetch. Rada: użyj wewnętrznej zmiennej static.


Zmienne rejestrowe

Deklaracja register powiadamia kompilator o tym, że zmienna, której ta deklaracja dotyczy, będzie intensywnie używana. Pomysł polega na tym, aby takie zmienne register umieszczać w rejestrach maszyny, co w efekcie może zmniejszyć i przyspieszyć programy. Kompilatory mogą jednak tę informację zignorować.

Oto typowa deklaracja register:

register int x; register char c;

Deklarację register można stosować jedynie do zmiennych automatycznych i do formalnych parametrów funkcji. W tym ostatnim przypadku deklaracja ma postać:

f(register unsigned m, register long n)

{

register int i;

}

W praktyce, przy korzystaniu ze zmiennych rejestrowych występują pewne ograniczenia odzwierciedlające rzeczywiste możliwości dostępnego sprzętu. Każda funkcja może przechowywać w rejestrach tylko kilka zmiennych, ponadto nie wszystkie ich typy są dozwolone. Nadliczbowe deklaracje zmiennych rejestrowych są jednak nieszkodliwe,

119


Wyszukiwarka

Podobne podstrony:
ANSI C 2 4 FUNKCJE I STRUKTURA PROGRAMU Deklaracja double sum, atof(char[ ]); mówi, że zmienna sum
ANSI C 4 4 FUNKCJE I STRUKTURA PROGRAMU Funkcja main jest pętlą zawierającą ogromną instrukcję swi
ANSI C 5 4 FUNKCJE I STRUKTURA PROGRAMU_________^ Zmienna jest zewnętrzna, jeśli zdefiniowano ją n
ANSI C 7 4 FUNKCJE I STRUKTURA PROGRAMU _________ Rozróżnienie deklaracji zmiennej zewnętrznej i j
ANSI C 9 4 FUNKCJE I STRUKTURA PROGRAMU gdyż słowo register w deklaracjach nadliczbowych czy też n
ANSI C 9 4 FUNKCJE I STRUKTURA PROGRAMU 4 FUNKCJE I STRUKTURA PROGRAMUWprowadzenie Na początku opr
ANSI C 0 4 FUNKCJE I STRUKTURA PROGRAMU /* getline: wczytaj wiersz do tablicy s; podaj jego długoś
ANSI C 1 4 FUNKCJE I STRUKTURA PROGRAMU wykonywalnego pliku zwanego a.out. Jeśli wystąpi błąd, np.
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU rozwagą, ponieważ mogą niekorzystnie wpływać na strukturę
ANSI C 6 4 FUNKCJE I STRUKTURA PROGRAMU_________._—---- W bibliotece standardowej występuje funkcj
ANSI C 0 4 FUNKCJE I STRUKTURA PROGRAMU-------------- zamiast int Iow, high, mid; Iow = 0; high =
ANSI C 1 4 FUNKCJE I STRUKTURA PROGRAMU I* qsort: uporządkuj v[left]...v[right] rosnąco */ void qs
ANSI C 2 4 FUNKCJE I STRUKTURA PROGRAMU Jeśli wstawiany plik zostanie zmieniony, to naturalnie wsz
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU zostanie rozwinięte w wiersz printf(Mx/yM ” = %g

karta pracy (18) Na każdym sznurku wisi jedna rzecz, która różni się od pozostałych. Odszukaj ję.
File0060(1) Na każdym sznurku wisi jedna rzecz, która różni się od pozostałych. Odszukaj ję.
Technika mikroprocesorowa Wprawdzie struktura programu jest nieprzekraczalna, ale nie wszystkie wymi
•    Pomyłka programisty. Jest to jedna z częstszych przyczyn powstawania błędów - je
■ Obecnie od systemu przesyłowego wymagana jest jeszcze jedna ważna cecha: powinien on zapewnić odbi

więcej podobnych podstron