J'aimerais comprendre parfaitement la hiérarchie des types du langage C11 et la présenter graphiquement (un diagramme en arbre serait parfait). La norme ne fournit aucune figure à ce sujet - il y a 30 points décrivant les types individuels et les relations entre eux. J'aimerais la dessiner.
Ma tentative a commencé par l'obtention du ISO/IEC 9899:201x Projet de comité N1570 et en extrayant toutes les déclarations essentielles de la section 6.2.5 du document. Ensuite, j'ai commencé à réorganiser les connaissances sous la forme d'un arbre. Permettez-moi de présenter mon travail en deux étapes.
Étape 1 : points 1 à 15
Les connaissances extraites (point de la section 6.2.5 + production spécifiée) :
- 1 types \= types d'objets + types de fonctions ;
- 4 types d'entiers signés standard \=
signed char
,short int
,int
,long int
,long long int
; - 4 types d'entiers signés \= types d'entiers signés standard + types d'entiers signés étendus ;
- 6 Types d'entiers non signés standard \=
_Bool
,unsigned char
,unsigned short int
,unsigned int
,unsigned long int
,unsigned long long int
; - 6 Types d'entiers non signés \= types d'entiers non signés standard + Types d'entiers non signés étendus ;
- 7 types d'entiers standard \= types d'entiers signés standard + types d'entiers non signés standard ;
- 7 types d'entiers étendus \= types d'entiers signés étendus + types d'entiers non signés étendus ;
- 10 types réels flottants \=
float
,double
,long double
; - 11 types complexes \=
float _Complex
,double _Complex
,long double _Complex
; - 12 types flottants \= types réels flottants + types complexes ;
- 14 types de base \=
char
+ types d'entiers signés + types d'entiers non signés + types flottants ; - 15 types de caractères \=
char
,signed char
,unsigned char
.
Et la structure qui en résulte :
types
object types
function types
basic types
char
sίgned integer types
standard sίgned integer types
signed char, short int, int, long int, long long int
extended sίgned integer types
unsίgned integer types
standard unsίgned integer types
_Bool, unsigned char, unsigned short int, unsigned int,
unsigned long int, unsigned long long int
extended unsίgned integer types
floating types
real floating types
float, double, long double
complex types
float _Complex, double _Complex, long double _Complex
standard integer types
standard sίgned integer types
standard unsίgned integer types
extended integer types
extended sίgned integer types
extended unsίgned integer types
character types
char, signed char, unsigned char
Étape 2 : points 16-24
Les autres déclarations :
- 16 types énumérés ;
- 17 types de nombres entiers \=
char
+ types entiers signés + types entiers non signés + types énumérés ; - 17 véritables types \= types entiers + types réels flottants ;
- 18 types arithmétiques \= types entiers + types flottants ;
- 20 types dérivés \= types de réseaux , types de structures , types de syndicats , types de fonctions , Types de pointeurs , types atomiques ;
- 21 types scalaires \= types arithmétiques + types pointeurs ;
- 21 types d'agrégats \= types de tableaux + types de structures ;
- 24 types de déclarateurs dérivés \= types de tableaux + types de fonctions + types de pointeurs.
Et la structure finale du système de type C11 :
types
object types
function types
basic types
char
sίgned integer types
standard sίgned integer types
signed char, short int, int, long int, long long int
extended sίgned integer types
unsίgned integer types
standard unsίgned integer types
_Bool, unsigned char, unsigned short int, unsigned int,
unsigned long int, unsigned long long int
extended unsίgned integer types
floating types
real floating types
float, double, long double
complex types
float _Complex, double _Complex, long double _Complex
standard integer types
standard sίgned integer types
standard unsίgned integer types
extended integer types
extended sίgned integer types
extended unsίgned integer types
character types
char, signed char, unsigned char
real types
integer types
char
sίgned integer types
standard sίgned integer types
signed char, short int, int, long int, long long int
extended sίgned integer types
unsίgned integer types
standard unsίgned integer types
_Bool, unsigned char, unsigned short int, unsigned int,
unsigned long int, unsigned long long int
extended unsίgned integer types
enumeration types
real floating types
float, double, long double
scalar types
arithmetic types
integer types
char
sίgned integer types
standard sίgned integer types
signed char, short int, int, long int, long long int
extended sίgned integer types
unsίgned integer types
standard unsίgned integer types
_Bool, unsigned char, unsigned short int, unsigned int,
unsigned long int, unsigned long long int
extended unsίgned integer types
enumeration types
floating types
real floating types
float, double, long double
complex types
float _Complex, double _Complex, long double _Complex
pointer types
derived types
array types
structure types
unίon types
function types
pointer types
atomic types
aggregate types
array type
structure type
derived declarator types
array type
structure type
pointer type
Maintenant, je dois réduire la structure (idéalement à un seul arbre) ou trouver une façon plus délicate de représenter les relations. J'aimerais arriver à une belle feuille de chèques pour le système de typage C11. Des idées ?