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.