Vakiot
Sellaiset
...
tiedot,
...
joita
...
ei
...
haluta
...
muuttaa
...
ohjelman
...
suorituksen
...
aikana,
...
kannattaa
...
määritellä
...
vakioiksi.
...
Esimerkiksi
...
pii
...
on
...
koko
...
ohjelman
...
ajan
...
sama.
...
C:ssä
...
käytetään
...
#define
...
-makroa
...
vakioiden
...
määrittelyyn:
Code Block |
---|
} #define PII 3.14 {code} |
Edellä
...
mainitulla
...
tiedolla
...
ei
...
kuitenkaan
...
ole
...
tyyppiä
...
ja
...
siksi
...
C++:ssa
...
tulisi
...
käyttää
...
määrittelyä:
Code Block |
---|
} const float Pii = 3.14; {code} |
const-avainsana
...
kertoo,
...
että
...
Pii
...
on
...
vakio,
...
eikä
...
sitä
...
voida
...
muuttaa
...
määrittelyn
...
jälkeen.
...
Muuttuva
...
tieto
...
(volatile)
...
Kun
...
tietoa
...
luetaan
...
esim.
...
joltain
...
laiteportilta,
...
tulee
...
se
...
tehdä
...
seuraavasti:
Code Block |
---|
} const volatile unsigned char *port=0x30; {code} |
Ohjelma
...
lukee
...
portilta,
...
jonka
...
heksadesimaalinen
...
osoite
...
on
...
0x30,
...
arvon,
...
jonka
...
ohjelma
...
ymmärtää
...
vakiona
...
ja
...
siten
...
se
...
kykenee
...
ainoastaan
...
käyttämään
...
ko.
...
muuttujan
...
arvoa,
...
muttei
...
muuttamaan
...
sitä.
...
Volatile
...
-määre
...
tarkoittaa
...
sitä,
...
että
...
muuttujan
...
arvo
...
päivitetään
...
joka
...
viittauskerran
...
yhteydessä,
...
sillä
...
tieto
...
voi
...
muuttua
...
milloin
...
vain.
...
Esikääntäjän
...
ohjaaminen
...
Seuraavassa
...
esikääntäjälle
...
ohjeet
...
siitä
...
mitä
...
ohjelman
...
osia
...
otetaan
...
mukaan
...
käännökseen:
Code Block |
---|
} #define LINUX // Määritellään LINUX #ifdef LINUX // tämä mukaan jos LINUX on määritelty #else // tämä mukaan jos LINUX ei ole määritelty #endif // LINUX {code} |
Toinen
...
yleinen
...
tapa
...
on
...
käänteinen
...
edelliseen
...
verrattuna,
...
eli
...
testataan
...
EIKÖ
...
LINUX
...
ole
...
määritelty:
Code Block |
---|
} #define LINUX // Määritellään LINUX #ifndef LINUX // tämä mukaan jos LINUX ei ole määritelty #else // tämä mukaan jos LINUX on määritelty #endif // !LINUX {code} h2. Useamman headerin käännösongelman ratkaisu Kun samaa |
Useamman headerin käännösongelman ratkaisu
Kun samaa header-tiedostoa
...
käyttää
...
useampi
...
käännösyksikkö
...
(.cpp-tiedosto),
...
tulee
...
huolehtia,
...
että
...
headerin
...
sisältö
...
tulee
...
ohjelmaan
...
vain
...
kerran
...
(muuten
...
tulee
...
päällekkäisiä
...
määrityksiä).
...
Se
...
hoidetaan
...
esikääntäjää
...
ohjaamalla:
Code Block |
---|
} #ifndef Luokka_h #define Luokka_h // Headerin sisältö tulee #ifndef ja #endif väliin. Tyyliin: class CLuokka { // ... }; #endif // Luokka_h {code} |
Tämän
...
kun
...
lisää
...
jokaiseen
...
header-tiedostoon,
...
niin
...
välttyy
...
ongelmilta.
...
Jotkin
...
C+
...
+
...
kehitysympäristöt
...
lisäävät
...
nämä
...
automaattisesti
...
ja
...
Microsoft
...
Visual
...
Studio
...
lisää
...
oman
...
#pragma
...
once
...
-määrittelynsä
...
joka
...
ajaa
...
saman
...
asia,
...
eikä
...
luultavastikaan
...
toimi
...
muissa
...
kääntäjissä
...
(ei
...
varmistettu).