ANSI C 9

ANSI C 9



4 FUNKCJE I STRUKTURA PROGRAMU

gdyż słowo register w deklaracjach nadliczbowych czy też niepoprawnych jest ignorowane. Nie ma także możliwości uzyskania adresu zmiennej rejestrowej (zagadnienie omawiane w rozdz. 5) niezależnie od tego, czy zmienną rzeczywiście umieszczono w rejestrze, czy nie. Szczegółowe ograniczenia dotyczące liczby i typów zmiennych rejestrowych zależą od maszyny.


Struktura blokowa

Język C nie ma struktury blokowej w sensie Pascala czy jemu podobnych języków, gdyż nie można definiować funkcji wewnątrz innych funkcji. Z drugiej strony, zmienne mogą być definiowane według zasad struktury blokowej wewnątrz funkcji. Deklaracje zmiennych (łącznie z ich inicjowaniem) można umieścić po otwierającym nawiasie klamrowym dowolnej instrukcji złożonej, a nie tylko po tym, który rozpoczyna funkcję. Tak zadeklarowane zmienne zasłaniają identycznie nazwane zmienne z bloków zewnętrznych i istnieją do napotkania odpowiedniego zamykającego nawiasu klamrowego. W przykładzie

if (n > 0) {

int i; /* definicja nowego i */

for (i = 0; i < n; i++)

• • ■

}

zasięgiem zmiennej i jest gałąź „prawdy” instrukcji if; ta zmienna i nie jest związana z żadną inną zmienną i występującą poza tym blokiem. Zmienna automatyczna deklarowana i inicjowana wewnątrz bloku otrzymuje swoją wartość początkową za każdym razem od nowa, przy każdym wejściu do bloku. Zmienna static jest inicjowana tylko raz, przy pierwszym wejściu do bloku, w którym ją zadeklarowano.

Zmienne automatyczne, łącznie z parametrami funkcji, zasłaniają także zmienne zewnętrzne i funkcje o tych samych nazwach, np. po deklaracjach

int x;

int y;

f(double x)

{

double y;

• • •

>

4.9 INICJOWANIE


pojawienie się X wewnątrz funkcji f jest odwołaniem do parametru funl typu double; poza funkcją f takie odwołania dotyczą zmiennej zewnętrznej x o typie int. Ta sama zasada obowiązuje dla zmiennej y.

Jest to kwestia stylu, ale lepiej unikać nazw zmiennych zasłaniających nazwy występujące w otoczeniu; niebezpieczeństwo wprowadzenia bałaganu i wystąpienia błędu jest zbyt duże.


Inicjowanie

Dotychczas temat nadawania wartości początkowych był poruszany wielokrotnie, zawsze jednak jako drugorzędny w stosunku do innych zagadnień. Po omówieniu różnych klas pamięci możemy wreszcie sformułować kilka zasad inicjowania zmiennych.

Jeśli nie podano jawnie wartości początkowych, to zmienne zewnętrzne i statyczne zawsze będą inicjowane zerami, natomiast wartości początkowe zmiennych automatycznych i rejestrowych będą nieokreślone (tj. przypadkowe).

Zmienne jednowymiarowe można inicjować przy ich definicji, umieszczając po nazwie zmiennej znak równości i pewne wyrażenie:

int x = 1;

char squote = ’\’    /* apostrof */

long day = 1000L * 60L * 60L * 24L; /* milisekundy/dzień */

Wartością początkową zmiennych zewnętrznych i statycznych musi być wyrażenie stałe; inicjowanie odbywa się tylko raz, ogólnie mówiąc - zanim pogram rozpocznie działanie. Zmienne automatyczne i rejestrowe są inicjowane przy każdym wejściu do funkcji lub bloku.

Wartością początkową zmiennej automatycznej i rejestrowej nie musi być stała: może nią być dowolne wyrażenie zawierające uprzednio zdefiniowane wartości a nawet wywołania funkcji. Na przykład, w programie wyszukiwania metodą bisekcji z p. 3.3 inicjowanie zmiennych można zapisać tak:

int binsearch(int x, int v[], int n)

{

int Iow = 0; int high = n - 1; int mid;

}

121


Wyszukiwarka

Podobne podstrony:
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 2 4 FUNKCJE I STRUKTURA PROGRAMU Deklaracja double sum, atof(char[ ]); mówi, że zmienna sum
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU rozwagą, ponieważ mogą niekorzystnie wpływać na strukturę
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 6 4 FUNKCJE I STRUKTURA PROGRAMU_________._—---- W bibliotece standardowej występuje funkcj
ANSI C 7 4 FUNKCJE I STRUKTURA PROGRAMU _________ Rozróżnienie deklaracji zmiennej zewnętrznej i j
ANSI C 8 4 FUNKCJE I STRUKTURA PROGRAMU Jest jeszcze jedna rzecz, o którą należy się zatroszczyć -
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

Struktura programu CNC słowo ^słowo ^łowo słowo N10 G00 X30 Z1 N20 G01 X30 Z-55
ScannedImage 54 Struktura rewolucji naukowych mianę naukowego widzenia świata czy też inne przeobraż

więcej podobnych podstron