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:

{
Code Block
}
#define PII 3.14
{code}

Edellä

...

mainitulla

...

tiedolla

...

ei

...

kuitenkaan

...

ole

...

tyyppiä

...

ja

...

siksi

...

C++:ssa

...

tulisi

...

käyttää

...

määrittelyä:

{
Code Block
}
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 Block
}
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.

...

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

#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 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
{code}

h2. Useamman headerin käännösongelman ratkaisu

Kun samaa 

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