Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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).