Wiki Markup |
---|
h2. Vakiot
Sellaiset |
Vakiot
...
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 |
} #define PII 3.14 {code} Edellä mainitulla tiedolla ei kuitenkaan ole tyyppiä ja siksi C++:ssa tulisi käyttää määrittelyä: |
...
{code |
} 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 |
} 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. |
...
h2. Esikääntäjän ohjaaminen |
...
Seuraavassa esikääntäjälle ohjeet siitä mitä ohjelman osia otetaan mukaan käännökseen: |
...
{code |
} #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 |
} #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 |
Useamman headerin käännösongelman ratkaisu
...
{code} h2. 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 |
} #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). |