Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

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:

...

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 siitä mitä ohjelman osia otetaan mukaan käännökseen:

...

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

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

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