previous next Up Title Contents Index

Esimerkki  3

Makrojen yhteydessä törmätään huomionarvoiseen seikkaan, joka erottaa makrot oleellisesti funktioista.

Oletetaan, että funktio max() on määritelty seuraavasti:

    int max (int x, int y)
    {
        return ((x>y)? x:y);
    }

Funktiota max() voitaisiin kutsua esimerkiksi seuraavalla tavalla:

    x = max(x++,y++);

Jos sitä vastoin käytetäänkin MAX-makroa max()-funktion kutsun tilalla, esikääntäjä tuottaa lauseen:

    x = ((x++)>(y++) ? (x++):(y++));

eli suuremman parametrin arvo on kasvanut kahdella lauseen suorituksen jälkeen, mikä ei ole sitä, mitä käyttäjä kuvittelee, kun hän käyttää makroa.

previous next Up Title Contents Index