Verständnis der C11-Typhierarchie
Ich möchte die Typhierarchie der C11-Sprache vollständig verstehen und grafisch darstellen (ein Baumdiagramm wäre perfekt). Die Norm enthält keine Abbildung für diese Ausgabe - es gibt 30 Punkte, die die einzelnen Typen und Beziehungen zwischen ihnen beschreiben. Ich würde es gerne zeichnen.
Mein Versuch begann mit der Erlangung derISO / IEC 9899: 201x Komitee-Entwurf N1570 und Extrahieren aller wesentlichen Aussagen aus Abschnitt 6.2.5 des Dokuments. Dann fing ich an, das Wissen in Form eines Baumes neu zu ordnen. Lassen Sie mich meine Arbeit in zwei Schritten vorstellen.
Schritt 1: Punkte 1–15Das extrahierte Wissen (Punkt in Abschnitt 6.2.5 + spezifizierte Produktion):
1 Typen = Objekttypen + Funktionsarten;4 Standard-Integer-Typen mit Vorzeichen =signed char
, short int
, int
, long int
, long long int
;4 vorzeichenbehaftete Integer-Typen = Integer-Typen mit Vorzeichen +erweiterte Integer-Typen mit Vorzeichen;6 Standard-Integer-Typen ohne Vorzeichen = _Bool
, unsigned char
, unsigned short int
, unsigned int
, unsigned long int
, unsigned long long int
;6 vorzeichenlose Integer-Typen = Standard-Ganzzahlentypen ohne Vorzeichen +erweiterte vorzeichenlose Integer-Typen;7 Standard-Integer-Typen = Standard Integer-Typen mit Vorzeichen + Standard Integer-Typen ohne Vorzeichen;7 erweiterte Integer-Typen = erweiterte Ganzzahltypen mit Vorzeichen + erweiterte Ganzzahltypen ohne Vorzeichen;10echte schwimmende Typen = float
, double
, long double
;11komplexe Arten = float _Complex
, double _Complex
, long double _Complex
;12schwimmende Typen = echte schwebende Typen + komplexe Typen;14Grundtypen = char
+ Integer-Typen mit Vorzeichen + Integer-Typen ohne Vorzeichen + Floating-Typen;fünfzehnZeichentypen = char
, signed char
, unsigned char
.Und die resultierende Struktur:
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
Schritt 2: Punkte 16–24Die restlichen Aussagen:
16Aufzählungstypen;17Ganzzahltypen =char
+ Integer-Typen mit Vorzeichen + Integer-Typen ohne Vorzeichen + Aufzählungstypen;17echte Typen = Integer-Typen + echte Floating-Typen;18arithmetische Typen = Integer-Typen + Floating-Typen;20abgeleitete Typen = Array-Typen, Strukturtypen, Gewerkschaftstypen, Funktionsarten, Zeigertypen, Atomtypen;21Skalartypen = arithmetische Typen + Zeigertypen;21Aggregattypen = Arraytypen + Strukturtypen;24abgeleitete Deklaratortypen = Array-Typen + Funktionstypen + Zeigertypen.Und die endgültige C11-Systemstruktur:
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
Jetzt muss ich die Struktur reduzieren (im Idealfall auf einen einzigen Baum) oder einen schwierigeren Weg finden, um die Beziehungen darzustellen. Ich möchte ein schönes Cheet-Sheet für das C11-Schreibsystem herausbringen. Irgendwelche Ideen?