Seuraava tulkitaan siten, että "- merkeissä oleva osa kirjoitetaan sellaisenaan. [] merkitsevät ehdollisuutta, {} 0- n kerran esiintymää ja | vaihtoehtoa, niitä ei siis kirjoiteta.
"#define" tunnus ["("tunnuslista ")"]{symboli} - makron määrittely
"#undef" tunnus - määrittelyn poisto
"#include" "<" tiedostonnimi ">" | tiedostomäärite - tiedoston lisääminen
"#if" vakiolauseke - käännetään jos != 0
"#elif" vakiolauseke - ELSE IF osa edelliseen
"#else" - ehd. käänt. ELSE- osa
"#error" virheviesti - lopettaa käännöksen
"#endif" - lopettaa ehd. käänt.
"#ifdef" tunnus - kään. jos tunnus olem.
"#if defined tunnus - synonyymi ed.
"#ifndef" tunnus - kään jos ei ole olem.
"#line" kokonaislukuliteraali [tiedostomäärite ] - vaihd. rivinro ja tied.
tiedostomäärite - > """tiedostonnimi"""
Valmiita makroja:
__DATE__ - käännöspäivä muodossa Mmm dd yyyy __FILE__ - käännettävän tiedoston nimi __LINE__ - rivinumero käännettävässä tiedostossa __STDC__ - 1 jos kääntäjä tekee standardikoodia
#line 29 "error.c"
#if __STDC__ != 1
# error Nyt tuli virhe, ei standardikääntäjä
#endif
#include <stdio.h>
#define LINTU "Käki"
int main(void)
{
printf("Ohjelma %s, rivi %d päivä %s\n",__FILE__,__LINE__,__DATE__);
printf(LINTU" kaukana kukkuu\n");
return 0;
}
Jos kääntäjä on standardimoodissa, tulostuu:
Ohjelma ERROR.C, rivi 37 päivä Dec 17 1992 Käki kaukana kukkuu
muuten käännös päättyy virheilmoitukseen:
Nyt tuli virhe, ei standardikääntäjä