|
De eerste stap in C
Wat is een identifier
Voor elke programmeertaal geldt dat je, voordat je kunt beginnen, moet
weten wat een identifier is. Een identifier is een naam die gebruikt
wordt voor elk soort variabele, funktie, gegevens definitie, enzovoort.
In de programmeertaal C is een identifier een combinatie van
alfanumerieke tekens. Het eerste teken moet een letter uit het alfabet
zijn of een onderstreping (_), de andere tekens mogen naast letters en
de onderstreping ook getallen zijn.
Grote en kleine letters worden in de taal C als verschillend gezien. De
variabele INDEX is bijvoorbeeld niet dezelfde als
Index en deze zijn ook weer niet gelijk aan InDeX.
Alle drie refereren ze aan een andere variabele. Sommige compilers
nemen slechts de eerste acht tekens van een naam als identifier, de
rest wordt afgekapt. Het is dus belangrijk eerst in de documentatie van
de compiler te kijken hoeveel tekens in een variabele naam als
significant beschouwd worden.
Sommige compilers accepteren ook vreemde tekens, zoals het $
teken in identifiers. Om reden van overdraagbaarheid van programma code
wordt aangeraden hiervan af te zien.
De onderstreping
Hoewel een onderstreping dus is toegestaan in identifiers, wordt dit
teken toch maar heel weinig gebruikt. Het maakt programma's beter
leesbaar, dat wel, doch het is een soort afspraak geworden alleen
systeem variabelen en macro namen met onderstrepingen te schrijven. In
deze cursus zal de Hungarian Notation worden toegepast.
In een computer programma zijn twee zaken te onderscheiden, de gegevens
en de programma code. Ze zijn sterk afhankelijk van elkaar en daarom
moet naast de code ook veel aandacht worden besteedt aan de data
structuren. In deze cursus zal ook aan de structurering van de gegevens
aandacht worden besteed.
De opbouw van de cursus
Het is de bedoeling stap voor stap de programma voorbeelden te
bestuderen. Elk voorbeeld staat op zichzelf en kan worden gecompileerd
en uitgevoerd. De programma voorbeelden werden uit een groter geheel
gelicht en zullen, naarmate de cursus vordert, weer tot het totale
programma leiden.
Op deze manier kan telkens een bepaald onderwerp uit de C taal worden
bestudeerd en geleerd. Er kan worden veranderd, om zo de effecten van
bepaalde statements te onderzoeken. Sommige cursussen gaan heel diep en
gedetailleerd op de C taal in, met als gevolg dat de motivatie om deze
toch wel moeilijke taal te leren zeer ver daalt.
Deze cursus doet dat niet. Hier wordt geprobeerd om op vlotte wijze met
de C taal om te gaan, waardoor de motivatie om te leren blijft. Nadat
alle losse onderdelen zijn bestudeerd, wordt een spel programma
gepresenteerd (Tripple Yahtzee), waarin alle geleerde onderwerpen
voorkomen. Op deze manier kan men zien hoe een werkelijk werkend
programma in C wordt opgebouwd. Daarbij zullen ook typisch PC zaken als
scherm aansturing aan bod komen.
Je zult steeds worden uitgenodigd om een programma in te tikken,
waarbij een programma naam tussen haakjes staat vermeld. Je kunt het
programma dan intikken en onder die naam wegschrijven op schijf. In de
meeste gevallen is het programma met die naam al op schijf aanwezig;
intikken is dan niet nodig. Bestuderen van het programma is wel nodig.
Nadat het programma dan is gecompileerd, kan het worden uitgevoerd om
te zien of dat wat het programma doet ook is wat je ervan verwacht.
Het compileren
Met een programma editor, bijvoorbeeld Norton Editor op de PC of EPM op
de PS/2, kan programma tekst worden aangemaakt. Tik het volgende
programma (HELLO.C) in:
main ()
{
printf ("Hello, world ...");
}
Compileer dit programma met de opdracht: CL hello.c
Na het compileren zijn er twee nieuwe bestanden ontstaan,
hello.obj en hello.exe. Het laatste bestand is een
uitvoerbaar programma bestand. Je kunt dit programma uitvoeren door in
te tikken: hello
Het linken
Wanneer een programma ontstaat uit meerdere kleine programma's, zoals
het geval is met het Yahtzee voorbeeld programma, moeten alle kleine
programma's afzonderlijk gecompileerd worden. Daarna worden dan de
losse onderdelen (de zogenaamde objecten) aan elkaar geplakt, geLINKt,
waardoor het grote programma bestand ontstaat. Ook het kleine programma
van boven kan in deze twee stappen ontstaan.
- Tik in:
- CL /c hello.c
Nu ontstaat het object bestand hello.obj.
- Tik in:
- LINK hello
Nu ontstaat het programma bestand hello.exe.
Let op de optie /c. Deze geeft de compiler de opdracht alleen te
compileren, niet te linken.
Je eerste C programma
De beste manier om met C te beginnen is om eens naar een programma te
kijken. Laten we daarom eens nader naar het HELLO.C programma gaan
kijken. Het is een erg eenvoudig programma. Er kan niet veel aan dit
programma vereenvoudigd worden. Het programma laat een tekstregel op de
monitor zien.
main ()
{
printf ("Hello, world ...");
}
Het woord main is erg belangrijk. Het mag slechts een keer in een
programma voorkomen. Dit is het punt waarop de uitvoering van het
programma begint (Entry point). We zullen later zien dat het niet het
eerste statement in het programma hoeft te zijn, het moet echter wel
aanwezig zijn.
Achter de programmanaam (main) volgen twee haakjes, die aangeven dat
dit een functie is. Op het begrip functie zal later uitgebreid worden
terug gekomen. Op dit moment is het voldoende om te weten dat de twee
haakjes nodig zijn. De twee accolades worden gebruikt om aan te geven
waar de funktie begint en waar hij eindigt. De programma regels staan
tussen de twee accolades. In dit geval staat er maar een (1) statement
tussen. Dit statement is zelf ook weer een functie. Nogmaals, we zullen
het begrip functie later toelichten.
Om tekst op de monitor af te drukken, wordt hier de tekst als string
parameter, d.w.z. omsloten door aanhalingstekens (") aan een uitvoer
functie (printf) gegeven. Het resultaat zal zijn dat alles wat tussen
de aanhalingstekens staat op de monitor zal worden afgedrukt. Merk op
dat aan het einde van het statement een punt-komma (;) staat. C
gebruikt de punt-komma als einde statement indicatie. Voor de compiler
is dit een teken dat de programma regel hier eindigt. Je kunt het
programma compileren en uitvoeren; het is een uitvoerbaar C programma.
Doe dit nu.
Nog een C programma
Bekijk nu het programma DRUKAF.C. Het lijkt erg veel op het vorige
programma, echter er zijn nu meer statements en er wordt meer
afgedrukt. Er staan vier statements in dit programma, elk is een printf
functie aanroep. De bovenste regel wordt het eerst uitgevoerd, dan de
tweede, vervolgens de derde en de vierde. De statements worden dus
uitgevoerd van boven naar beneden.
main ()
{
printf ("Dit is een regel tekst.\n");
printf ("En dit is nog ");
printf ("een regel tekst.\n\n");
printf ("Dit is de laatste regel tekst.\n");
}
Merk op dat er een speciaal karakter-paar aan het einde van sommige
regels staat, en wel de Backslash-n combinatie. De Backslash (\) wordt
in de printf functie gebruikt als een besturingsteken. In het geval van
'\n' wordt een NewLine teken gevormd, hetgeen tot gevolg heeft dat de
cursor naar de eerste positie van de volgende regel gaat. Meestal wordt
dit aangeduid als Carriage return/Line feed. Het NewLine
teken mag overal in de tekst voorkomen, zelfs in het midden van een
woord. De compiler vertaalt de \n combinatie naar 1 teken.
Het eerste printf statement drukt een regel af en zet de cursor op een
nieuwe regel. Het tweede statement drukt een regel af maar laat de
cursor staan. Het derde statement gaat dus op de tweede regel verder
met afdrukken en zet de cursor op een extra volgende regel. Het vierde
statement drukt dan de tekst af na een blanco regel en het programma is
klaar. Compileer en draai dit programma en kijk of het werkt zoals
hierboven beschreven.
Laten we eens getallen afdrukken
Bekijk nu het programma NUMMERS.C om te zien hoe we met gegevens werken
in C. Het woord main zal nu duidelijk zijn evenals de accolades. Wat
nieuw is, is de regel met int getal;. Op deze manier wordt
in C een integer variabele gedeclareerd met de naam getal. Het woord
int is een taalelement van C en mag niet voor iets anders
gebruikt worden. Hierdoor wordt een variabele gedefinieerd die waarden
kan bevatten in het bereik -32768 tot 32767 op de meeste micro
computers. Op grotere systemen kan een integer aanmerkelijk grotere
waarden bevatten. Kijk daarvoor in de documentatie van de compiler.
main ()
{
int getal;
getal = 13;
printf ("De waarde van het getal is %d \n", getal);
getal = 27;
printf ("De waarde van het getal is %d \n", getal);
getal = 10;
printf ("De waarde van het getal is %d \n", getal);
}
De naam van de variabele, hier getal, kan elke naam zijn die
voldoet aan de regels voor een identifier. De punt-komma be‰indigt de
declaratie. Er mag meer dan een variabele tegelijk op een regel worden
gedeclareerd, zoals we in het Yahtzee programma zullen zien. Het
programma kent drie keer achter elkaar een waarde toe aan de variabele
getal (13, 27 en 10) en drukt die af. Het mag duidelijk zijn dat
getal inderdaad een variabele is, waarin verschillende
waarden kunnen worden opgeslagen.
Hoe worden getallen afgedrukt
Laten we nog even terugkeren naar het NUMMERS.C programma. Het daarin
gebruikte printf statement is drie keer hetzelfde. Het printf statement
begint met de tekst string. Het verschil met de vorige keer is, dat de
tekst naast het besturingsteken \n nog een procent teken (%)
bevat. Het procent teken heeft een bijzondere betekenis voor de printf
functie. Op de plaats waar dit teken staat wordt de waarde van de
variabele afgedrukt. Het Procent teken geeft aan dat er een variabele
van een bepaald type moet worden afgedrukt. Welk type dat is, wordt
bepaald door een letter die er op volgt, hier de d. De
d geeft aan dat er een integer moet worden afgedrukt.
Alle karakters die tussen de aanhalingstekens staan zullen hetzij
direct, hetzij via conversie, worden afgedrukt. De tekst wordt gevolgd
door een komma (,) en de naam van de variabele (getal). Hierdoor weet
de printf functie welke integer moet worden afgedrukt op de plaats van
de %d tekens. Er kunnen meerdere %d tekens in de
tekst worden opgenomen. Er zullen dan ook even zoveel variabele namen
moeten worden toegevoegd, gescheiden door een komma.
Als het aantal procent tekens en het aantal variabelen niet exact
overeenkomen, zal tijdens UITVOERING een fout optreden, niet tijdens
compileren. Dit is belangrijk om te onthouden. Uiteraard zullen we
uitgebreid op Invoer/Uitvoer mechanismen terugkomen in deze cursus. We
hebben de tot nu toe opgedane kennis echter nodig om de voorbeelden uit
de volgende hoofdstukken goed te kunnen begrijpen.
|