#include oli tiedote esikääntäjälle siitä, että koodin sekaan täytyy lukea välillä jokin toinen teksti.
Makro-direktiivi #define on tiedote siitä, että tällä määreellä myöhemmin tekstissä esiintyvät sanat täytyy korvata toisella sanalla/sanoilla/merkeillä.
Yksinkertaisten makrojen käytön hyöty on siinä, että usein ohjelmassa esiintyvät sanat/vakionumerot voidaan koota helposti hallittavaksi ohjelman alkuun tai jopa omaan määrittelytiedostoonsa.
Siis #define- direktiivi on puhdas tekstinkäsittelyotus, joka toimii suurin piirtein seuraavasti:
#define TERVE "Hello "
tarkoittaisi esikääntäjälle:
vaihda kaikki TERVE- sanat merkkijonoiksi "Hello " eli seuraavat vaihdettaisiin: p=TERVE+1 /* => p="Hello "+1 */ "Kissa"TERVE"istuu" /* => "Kissa""Terve ""istuu" */ TERVE MIEHEEN /* => "Hello" MIEHEEN */ muttei seuraavia TERVEYDEKSI /* Ei pelkkä TERVE-sana */ TERVE_MIEHEEN /* Ei pelkkä sana */ "OLEN OLLUT TERVE 2 PÄIVÄÄ" /* Lainausmerkeissä */ Terve MIEHEEN /* Eri tavalla kirjoitettu */
Huomattakoon, ettei lainausmerkkien sisällä oleviin sanoihin kajota lainkaan!
Määriteltävä sana voidaan kirjoittaa isoja ja/tai pieniä kirjaimia käyttäen, mutta yleiseen C- tyyliin kuuluu kirjoittaa #define - määritellyt sanat isoilla kirjaimilla.
Vaihdettava sana loppuu ja korvaava jono alkaa ensimmäisestä ei- kirjaimesta tai numerosta, eli
#define X=2; /* VAARALLINEN! X => =2; */ :-( int i=X; /* => int i==2;; */