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:
...
#define
...
PII
...
3.14
...
Edellämainitulla
...
tiedolla
...
ei
...
kuitenkaan
...
ole
...
tyyppiä
...
ja
...
siksi
...
C++:ssa
...
tulisi
...
käyttää
...
määrittelyä:
...
const
...
float
...
Pii
...
=
...
3.14;
...
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:
...
const
...
volatile
...
unsigned
...
char
...
*port=0x30;
...
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:
#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
Toinen yleinen tapa on käänteinen edelliseen verrattuna, eli testataan EIKÖ LINUX ole määritelty:
#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
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.
#ifndef Luokka_h
#define Luokka_h
// Headerin sisältö tulee #ifndef ja #endif väliin. Tyyliin:
// class CLuokka
//
{ // ... // }
;
#endif // Luokka_h
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).