Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

19.4 Virheilmoitukset, static

Talletukseen liittyvät aliohjelmat on suunniteltu string - tyyppisiksi. Mikäli jokin menee pieleen, palauttavat ne nimessään itse virheilmoitukseen, jolloin kutsunut ohjelma voi halutessaan tulostaa virheilmoituksen.

Mikäli aliohjelma päättyy onnellisesti, voidaan palauttaa tyhjä merkkijono, eli ei virheilmoitusta.

	jasenet.cpp:
	static const char *TIED_EI_AUKEA  = "Tiedosto ei aukea!";
	...
	  if ( !f ) return TIED_EI_AUKEA;
	  ...
	  return "";
	...
	
	naytto.cpp:
	  string virhe;
	  virhe = kerho->lue_tiedostosta(tied);
	  if ( virhe != "" ) {
	    cout << virhe << endl;
	    return 1;
	  }
	  return 0;

Tässä static tarkoittaa, että muuttuja on vain tämän tiedoston (jasenet.cpp ) sisäinen eikä näin ollen nimenä näy tiedoston ulkopuolelle. Kuitenkin muuttuja säilyttää arvonsa koko ohjelman suorituksen ajan, joten ulospäin voimme välittää osoitteita tällaisiin muuttujiin, ja näin jokin toinenkin ohjelman osa pääsee niihin käsiksi (tosin tässä ei ole suotavaa, että joku niitä muuttaisi, siis osoitteet on käsitettävä " read only "). Tähän käyttöön merkkijonot olisi voitu esitellä myös aliohjelman sisäisinä staticeina.

static- muuttujat varataan eri alueesta kuin aliohjelman lokaalit (automaattiset) muuttujat. Lokaalit muuttujat otetaan yleensä ajonaikana pinosta, joka saattaa myös loppua. Näin ollen ei- rekursiivisissa aliohjelmissa usein lokaaleillekin isoille muuttujille annetaan static- määritys.

C- kielen static - sanalla on siis kaksi merkitystä, ja sen tilalla pitäisikin olla oikeastaan kaksi eri sanaa: PRIVATE ja SAVE. Joku saattaisikin määritellä

	#define PRIVATE static
	#define SAVE    static

Tehtävä 19.161 static

Mikä oli static - sanan toinen ( SAVE) merkitys?

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys