Hoe een C-programma te lezen: de printf-instructie opsplitsen

6

De code is bedrieglijk eenvoudig. Het lijken vier lijnen. Het doet één ding. Er wordt tekst op uw scherm afgedrukt. Maar achter die ene actie schuilt een gestructureerd contract tussen u, de compiler, en het besturingssysteem. Het begrijpen van dit contract is de eerste stap om daadwerkelijk controle te krijgen over wat uw computer doet, in plaats van deze alleen maar standaardscripts te laten uitvoeren.

De bibliotheekafhankelijkheid

Het proces begint voordat enige logica wordt uitgevoerd. De eerste regel, #include , is geen code die wordt uitgevoerd. Het is een instructie voor de preprocessor. Het haalt de standaard I/O-bibliotheek binnen. Zonder dit zou de compiler niet weten wat hij moet doen met commando’s als printf.

stdio.h staat voor standaardinvoer en -uitvoer. Het regelt de basis: lezen vanaf het toetsenbord (standaard in) en schrijven naar de monitor (standaard uit). Het beheert ook tekstbestanden op schijf. C wordt geleverd met andere bibliotheken zoals string, time en math, maar stdio is het toegangspunt voor bijna alles. Een bibliotheek bestaat uit vooraf geschreven code die is gebundeld, zodat u het wiel niet opnieuw hoeft uit te vinden. U schrijft niet de geheugenverwerking op laag niveau voor het afdrukken van tekst. U voegt het pakket toe. Jij gebruikt het.

Het toegangspunt

Elk C-programma heeft een toegangspunt nodig. Dat is de functie int main(). De uitvoering begint hier. Als er geen ‘main’ is, faalt de linker. Het programma bestaat niet.

De int vóór main geeft aan wat de functie zal retourneren als deze klaar is. De haakjes zijn leeg omdat deze versie geen argumenten gebruikt. Eenvoudig genoeg. Maar over de accolades { en } die volgen, kan niet worden onderhandeld. Zij definiëren het blok. Alles binnenin behoort tot ‘main’. Alles daarbuiten wordt door deze specifieke functieomvang genegeerd.

Het uitvoermechanisme

In het blok vind je de printf -instructie. Dit is waar de magie gebeurt. printf verzendt gegevens naar standard out. Voor de meeste gebruikers betekent dit het terminalvenster of de console.

De tekst tussen aanhalingstekens is de opmaaktekenreeks. Het vertelt printf precies wat er moet worden weergegeven. Het kan letterlijke tekenreeksen bevatten zoals "Hallo wereld". Het kan ontsnappingsreeksen zoals \n voor een nieuwe regel verwerken. Het kan ook tijdelijke aanduidingen voor variabelen gebruiken, hoewel dat een laag dieper ligt. Als u op een UNIX-systeem werkt, typt u man 3 printf en komt u op de handleidingpagina terecht voor een gedetailleerd overzicht van de formaatspecificaties. Windows-gebruikers vertrouwen meestal op de documentatie van de compiler, maar het kerngedrag blijft identiek.

De uitgangscode

De laatste regel is return 0;. Het lijkt triviaal. Waarom iets retourneren? Omdat processen niet in een vacuüm plaatsvinden. Ze communiceren met de granaat die hen heeft gelanceerd.

Een exitcode van 0 duidt op succes. Het betekent ‘geen fouten’. Een waarde die niet nul is, duidt doorgaans op een storing of een specifieke statuscode. De shell controleert deze waarde nadat main is voltooid. Hiermee kunnen scripts opdrachten aan elkaar koppelen, waarbij de volgende stap alleen wordt uitgevoerd als de vorige is gelukt. Het is een handdruk. Een bevestiging dat de taak is voltooid zonder te crashen.

Waarom dit ertoe doet

Je zou kunnen denken dat dit slechts een boilerplate is. Dat is het niet. Het is het skelet van elk uitvoerbaar bestand dat je ooit in C zult schrijven. Als je de opname van de bibliotheek verkeerd begrijpt, krijg je ongedefinieerde referentiefouten. Vergeet het retourtype en de compiler waarschuwt