C Programmeren Handleiding Deel 2 – Preprocessoren

In het eerste deel van onze doorlopende C programmeer-tutorial serie, hebben we kort de voorbewerkingsfase aangestipt. In deze handleiding gaan we er iets dieper op in, zodat je er een basisidee over hebt voordat je andere C programmeeraspecten leert kennen.

Preprocessing is gewoonlijk het eerste stadium van programma compilatie, waarin-in alles wat met een ‘#’ begint verwerkt wordt. Laten we een basis voorbeeldcode nemen.

#include <stdio.h>

int main (void)
{
    printf("\n Hello World \n");
    return 0;
}

Ja, dit is hetzelfde stukje code dat we in het eerste deel van deze artikelenreeks gebruikten. Hier is het de eerste regel die begint met een hash ‘#’. In lekentaal: de regel ‘#include <stdio.h>’ zorgt ervoor dat de inhoud van het header bestand ‘stdio.h’ tijdens het compileren in dit programma wordt opgenomen.

Wat er dus in de voorbewerkingsfase gebeurt, is dat deze regel vervangen wordt door de eigenlijke inhoud van het header bestand. Hier zie je hoe de code er na de voorbewerkingsfase uitziet:

C Code Bestand

Je ziet dus dat alles boven de paar regels code die we schreven (kijk onderaan de schermafbeelding) de inhoud is van stdio.h. Nu zal ik niet in details treden over hoe ik de code na het voorbewerken kon zien, maar dit was om je een duidelijk idee te geven van wat er tijdens het voorbewerken gebeurt.

Verder gaan, regels die een header bestand bevatten zijn niet de enige die met een hash (#) beginnen. Er is ook iets dat Macro’s heet en dat ook met # begint. Het is dus belangrijk ze hier te bespreken (althans hun basisprincipes).

Een Macro is niets anders dan een naam (meestal in hoofdletters) die naar een stukje code verwijst. Macro’s worden gedefinieerd met de ‘#define’ richtlijn. Hier is een voorbeeld:

#include <stdio.h>
#define PRINT_HELLO_WORLD printf("\n Hello World \n");
int main (void)
{
    PRINT_HELLO_WORLD
PRINT_HELLO_WORLD
    return 0;
}

We definieerden dus een macro PRINT_HELLO_WORLD met de waarde printf(“\n Hello World \n”);. Overal waar we nu deze macronaam in de code gebruiken, wordt hij bij het voorbewerken vervangen door zijn waarde. Hier is de code na voorbewerking:

C Programma Macro

Je ziet dus dat beide voorkomens van de macro bij de voorbewerking vervangen werden door zijn waarde. Natuurlijk zijn er nog verschillende andere details met betrekking tot macro’s die je moet kennen om ze met succes te kunnen gebruiken. We zullen die details bespreken in een aan macro’s gewijd deel van deze leerprogramma serie.

Verder gaan, de derde soort regels die met # beginnen zijn #ifdef en #endif. Deze worden gebruikt voor voorwaardelijke compilatie. Om je een idee te geven, er zijn momenten waarop je niet zou willen dat een deel van code gecompileerd wordt op basis van een bepaalde voorwaarde, het is in dit soort gevallen dat deze directieven gebruikt worden.

Hier is een voorbeeld:

#include <stdio.h>
#define PRINT_HELLO_WORLD printf("\n Hello World \n");

int main (void)
{
#ifdef CONDITION
    PRINT_HELLO_WORLD
#endif
    PRINT_HELLO_WORLD
    return 0;
}

In de code hierboven wordt, omdat ‘CONDITION’ nergens gedefinieerd is, dus het eerste voorkomen van ‘PRINT_HELLO_WORLD’ alleen in het voorbewerkingsstadium uit de code weggelaten. Hier zie je het bewijs:

Conditiecode

Je ziet dus maar één printf statement na de voorbewerkingsfase.

Conclusie

In deze tutorial bespraken we preprocessing om C programmeer beginners een basisidee te geven van wat er in dit stadium gebeurt. Ga nu verder naar deel 3 om verder te leren over de grondbeginselen van C programmeren.