Programmeren in C/Datatypes: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Kleuske (overleg | bijdragen)
Geen bewerkingssamenvatting
Kleuske (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 1:
Om gegevens te kunnen opslaan en bewerken, kent ''C'' een aantal datatypes die onderverdeeld kunnen worden in twee klassen:
 
* Eenvoudige types (''simplebasic types'') die bebstaan uit een, atomair gegevenstype. Hieronder vallen (onder andere) chars, integers, floats, pointers en pointersenums.
* Samengestelde types (''aggregate types''), die bestaan uit een of meer andere types die op hun beurt ook samengesteld kunnen zijn. Hieronder vallen arrays, structures, unions.
 
In dit hoofdstuk zullen alleen de eenvoudige types worden behandeld en alleen voor zover ze standaard zijn. Arrays, structs, unions zullen in afzonderlijke hoofdstukken worden behandeld, want deze hebben wat meer voeten in aarde.
== Eenvoudige types ==
 
=== int ===
 
Van al deze types is ''int'' zonder enige twijfel het meest gebruikte en geeft een geheel getal weer. Dit lijkt echter een stukje simpeler dan het in werkelijkheid is, want, zoals al in de inleiding werd verteld, de taal ''C'' mag geen aannames doen over de hardware waarop het programma uiteindelijk zal werken. ''C'' Integers hebben dan ook, met uitzondering van een ''short int'', geen vaste afmetingen. Uitsluitend het minimale aantal bits is gespecificeerd.
Regel 58:
Een "normale" integer heeft in deze taal een minimale breedte van 16 bits, hoewel de meeste huis-, tuin- en keuken-pc programmeer omgevingen voor beide typen 32 bits hanteren. Dit heeft aanleiding gegeven tot veel misverstanden onder hobby-programmeurs en de sarcastische slogan ''"all the world is 32 bit"''. De fouten die hiermee worden gemaakt, door aan te nemen dat type ''X'' altijd ''N'' bits telt of dat type ''X'' en type ''Y'' even breed zijn, komen aan het licht zodra een van beide typen afwijkt, bijvoorbeeld omdat men is overgeschakeld naar een 64-bits implementatie, waar een ''long integer'' 64 bits bevat. Dit verschijnsel is een vrij veelvoorkomende bron van [[bug]]s. Met de ''sizeof'' operator laat zich echter eenvoudig achterhalen welke definities een specifieke compiler gebruikt en kan de software zonder deze aannames geschreven worden.
 
=== ''char'' ===
 
Een ''char'' is een type dat bedoeld is karakters op te slaan. Het type is breed genoeg om alle karakters in de ''execution character set'' als positieve waarde op te slaan. De waarde van alle andere karakters is afhankelijk van de implementatie.
Regel 78:
Het is mogelijk een char als tiny int te gebruiken, maar meestal levert dit meer last dan gemak op. Veelal moet extra object-code worden gegenereerd om de conversie van char naar int te bewerkstelligen (wat het programma groter maakt in plaats van kleiner) en de teken-expansie kan rare effecten opleveren, vooral omdat de standaard in het midden laat of char wel of geen teken heeft.
 
=== ''float'', ''double'' en ''long double'' ===
 
De typen ''float'', ''double'' en ''long double'' worden gebruikt om getallen met een drijvende komma op te slaan. Hoe de representatie van deze getallen plaatsvindt, is niet gespecificeerd en daarmee afhankelijk van de compiler. Het enige dat wel gespecificeerd is, is dat een ''double'' een grotere precisie en bereik heeft dan een ''float'' en een ''long double'' een grotere precisie en bereik heeft dan een ''double''. Over het algemeen kan gezegd worden dat deze drie de volgende standaard elementen hebben. Het loont de moeite om, als men programma's met ''floating-point''-getallen schrijft, zich te informeren over de implementatie die de compiler gebruikt (ofwel: "''[[:w:RTFM|RTFM]]''").
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.