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

...

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

...

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 

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

 ohjaamalla.

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