Kyseessä on esiprosessorin direktiivi, jolla määrätään minkä osan esiprosessori antaa varsinaiselle kääntäjälle käsiteltäväksi.
Tällä periaatteella voidaan rakentaa ohjelmia, joissa tekstit tulevat eri kielillä (englanti, ruotsi, suomi) sen mukaan, mitä ohjelmassa on määritelty.
Samalla tempulla teimme myös lue_merkki - aliohjelman toimimaan joko Turbo- C:ssä tai standardi ANSI- C:ssä sen mukaan onko määritelty sana __TURBO__ (huomaa kaksi _ kummallakin puolella!):
#ifdef __TURBOC__ # define GETCH # include <conio.h> #endif ... char lue_merkki(void) { #ifdef GETCH ... /* lukeminen conio- kirjaston avulla */ #else ... /* lukeminen standardikirjaston avulla */ #endif }Usein kääntäjään liittyy kääntäjän määrittelemiä symboleja, joiden olemassaoloa testaamalla voidaan tehdä laiteriippuvia osia. Juuri tällainen oli __TURBOC__. Ehtona voi olla myös jokin oma sana kuten edellä GETCH. Usein itse määriteltyjä sanoja käytetään estämään .h- tiedoston moninkertaiset esiintymät:
... #ifndef MJONOT_H #define MJONOT_H ... /* varsinainen h- tiedoston sisältö */ #endifNyt voidaan pääohjelmassa kirjoittaa
#include "mjonot.h" /* Lukee mjonot.h - tiedoston kokonaan */ #include "mjonot.h" /* Ei tee mitään koska MJONOT_H määr. */