previous next Up Title Contents Index

19.4 Virheilmoitukset, static


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

Mikäli aliohjelma päättyy onnellisesti, voidaan palauttaa NULL- osoitin, eli ei virheilmoitusta.

	jasenet.cpp:
	static const char *TIED_EI_AUKEA  = "Tiedosto ei aukea!";
	...
	  if ( !f ) return TIED_EI_AUKEA;
	  ...
	  return NULL;
	...
	  if ( (virhe=talleta_kerho(&kerho))!=NULL ) {
	  printf("%s",virhe);
	
	naytto.cpp:
	  const char *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.166 static

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


previous next Up Title Contents Index