Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.6.2 Muuttujien lokaalisuus

Kukin aliohjelma muodostaa oman kokonaisuutensa. Edellä olleissa esimerkeissä aliohjelmat eivät tiedä ulkomaailmasta mitään muuta, kuin sen, mitä niille tuodaan parametreinä kutsun yhteydessä.

Vastaavasti ulkomaailma ei tiedä mitään aliohjelman omista muuttujista. Näitä aliohjelman lokaaleja muuttujia on esim. seuraavassa:

	void kysy_matka(int *pMatka_mm)
	{
	  int mm;
	  printf("Anna matka millimetreinä>");
	  scanf("%d",&mm);
	  *pMatka_mm = mm;
	}

	pMatka_mm   -  aliohjelman parametrimuuttuja (tässä tapauksessa osoitinmuuttuja).
	mm          -  aliohjelman lokaali apumuuttuja matkan lukemiseksi.

Yleensäkin C- kielessä lausesulut { ja } muodostavat lohkon, jonka ulkopuolelle mikään lohkon sisällä määritelty muuttuja tai tyyppimääritys ei näy. Näkyvyysalueesta käytetään englanninkielisessä kirjallisuudessa nimitystä scope. Lokaaleilla muuttujilla voi olla vastaava nimi, joka on jo aiemmin esiintynyt jossakin toisessa yhteydessä. Lohkon sisällä käytetään sitä määrittelyä, joka esiintyy lohkossa:

c-muut\lokaali.c - lokaalien muuttujien näkyvyys

	#include <stdio.h>             	:-(
	int main(void)
	{
	   char ch='A';
	   printf("Kirjain %c",ch);
	   {
	     int ch = 5;
	     printf(" kokonaisluku %d",ch);
	     {
	       double ch = 4.5;
	       printf(" reaaliluku %5.2lf\n",ch);
	     }
	   }
	   return 0;
	}

Saman tunnuksen käyttäminen eri tarkoituksissa on kuitenkin kaikkea muuta kuin hyvää ohjelmointia.

Tehtävä 8.72 Eri nimet

Korjaa edellinen ohjelma siten, että kullakin erityyppisellä muuttujalla on eri nimi.

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys