...
C:ssä käytetään #define -makroa vakioiden määrittelyyn:
Code Block |
---|
#define PII 3.14 |
Edellämainitulla Edellä mainitulla tiedolla ei kuitenkaan ole tyyppiä ja siksi C++:ssa tulisi käyttää määrittelyä:
Code Block |
---|
const float Pii = 3.14; |
const-avainsana kertoo, että Pii 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; |
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 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 |
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 |
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 |
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).