Ce que beaucoup ne comprennent pas, c'est que le standard au début (89 et 90) n'
a fait qu'entériner un certain nombre de pratiques courantes (histoire que la no
rme de fait devienne un standard de référence pour de nouveaux entrants, et au p
assage graver dans le marbre une spécification qui n'existait pas vraiment... Les
créateurs ont écrit un ouvrage de référence et laissé une implémentation mais ja
mais écrit formellement les spécifications.) En aucun cas le standard n'a jamais
supposé une certaine architecture, contrairement à d'autres compilateurs... Ainsi
, Wikipedia en anglais rappelle clairement :
The actual size of the integer types varies by implementation. The standard re
quires only size relations between the data types and minimum sizes for each dat
a type:
The relation requirements are that the long long is not smaller than long, whi
ch is not smaller than int, which is not smaller than short. As char's size is a
lways the minimum supported data type, no other data types (except bit-fields) c
an be smaller.
The minimum size for char is 8 bits, the minimum size for short and int is 16 bits, for long it is 32 bits and long long must contain at least 64 bits.
The type int should be the integer type that the target processor is most efficiently working with. This allows great flexibility: for example, all types can be 64-bit. However, several different integer width schemes (data models) are popular. Because the data model defines how different programs communicate, a uniform data model is used within a given operating system application interface.
La portabilité du langage est en fait que c'est un macro assembleur (l'usage du C permet de ne pas avoir à se battre avec les différentes syntaxes d'assembleur pour la plupart des cas) dont le code de compilateur est assez petit et adaptable aux diverses plateformes. Si, avec les registres de ton CPU ton int est de 20 bits et ton long de 60 bits pas de souci. :-D
Avec l'évolution, le standard met des barrières à minima...
In practice, char is usually 8 bits in size and short is usually 16 bits in size (as are their unsigned counterparts). This holds true for platforms as diverse as 1990s SunOS 4 Unix, Microsoft MS-DOS, modern Linux, and Microchip MCC18 for embedded 8-bit PIC microcontrollers. POSIX requires char to be exactly 8 bits in size.
C'est là par exemple une des barrières parce-qu'il ont estimé que c'est le minimum auquel on a pu descendre dans les années 80 (on ne parle pas des ALU qui peuvent être de 4 comme sur Saturn ou Zilog 80). Si un fondeur fait moins, il ne pourra pas utiliser le C standard (dont on a là une limite de portabilité) :-D
"It is seldom that liberty of any kind is lost all at once." ― David Hume
[^] # Re: Encenser le C? Non!
Posté par Gil Cot ✔ (site web personnel, Mastodon) . En réponse au journal C, un âge remarquable. Évalué à 6.
Ce que beaucoup ne comprennent pas, c'est que le standard au début (89 et 90) n'
a fait qu'entériner un certain nombre de pratiques courantes (histoire que la no
rme de fait devienne un standard de référence pour de nouveaux entrants, et au p
assage graver dans le marbre une spécification qui n'existait pas vraiment... Les
créateurs ont écrit un ouvrage de référence et laissé une implémentation mais ja
mais écrit formellement les spécifications.) En aucun cas le standard n'a jamais
supposé une certaine architecture, contrairement à d'autres compilateurs... Ainsi
, Wikipedia en anglais rappelle clairement :
La portabilité du langage est en fait que c'est un macro assembleur (l'usage du C permet de ne pas avoir à se battre avec les différentes syntaxes d'assembleur pour la plupart des cas) dont le code de compilateur est assez petit et adaptable aux diverses plateformes. Si, avec les registres de ton CPU ton
intest de 20 bits et tonlongde 60 bits pas de souci. :-DAvec l'évolution, le standard met des barrières à minima...
C'est là par exemple une des barrières parce-qu'il ont estimé que c'est le minimum auquel on a pu descendre dans les années 80 (on ne parle pas des ALU qui peuvent être de 4 comme sur Saturn ou Zilog 80). Si un fondeur fait moins, il ne pourra pas utiliser le C standard (dont on a là une limite de portabilité) :-D
"It is seldom that liberty of any kind is lost all at once." ― David Hume