Zrozumienie hierarchii typów C11
Chciałbym w pełni zrozumieć hierarchię typów języka C11 i przedstawić go graficznie (idealny byłby diagram drzewa). Norma nie przedstawia żadnej liczby dla tego zagadnienia - istnieje 30 punktów opisujących poszczególne typy i relacje między nimi. Chciałbym to narysować.
Moja próba zaczęła się od zdobyciaProjekt ISO / IEC 9899: Komitet 201x N1570 i wyodrębnienie wszystkich istotnych stwierdzeń z sekcji 6.2.5 dokumentu. Potem zacząłem zmieniać wiedzę w formie drzewa. Pozwólcie, że przedstawię moją pracę w dwóch krokach.
Krok 1: punkty 1–15Wyodrębniona wiedza (punkt w sekcji 6.2.5 + określona produkcja):
1 typy = typy obiektów + typy funkcji;4 standardowe podpisane typy całkowite =signed char
, short int
, int
, long int
, long long int
;4 podpisane typy całkowite = standardowe podpisane typy całkowite +rozszerzone podpisane typy całkowite;6 standardowe typy liczb całkowitych bez znaku = _Bool
, unsigned char
, unsigned short int
, unsigned int
, unsigned long int
, unsigned long long int
;6 typy całkowite bez znaku = standardowe liczby całkowite bez znaku +rozszerzone typy liczb całkowitych bez znaku;7 standardowe typy całkowite = standardowe podpisane typy całkowite + standardowe typy liczb całkowitych bez znaku;7 rozszerzone typy całkowite = rozszerzone typy liczb całkowitych ze znakiem + rozszerzone typy liczb całkowitych bez znaku;10prawdziwe typy pływające = float
, double
, long double
;11typy złożone = float _Complex
, double _Complex
, long double _Complex
;12typy pływające = prawdziwe typy pływające + typy złożone;14podstawowe typy = char
+ podpisane typy całkowite + typy całkowite bez znaku + typy zmiennoprzecinkowe;15typy znaków = char
, signed char
, unsigned char
.I wynikająca z tego struktura:
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
Krok 2: punkty 16–24Pozostałe oświadczenia:
16wyliczone typy;17typy całkowite =char
+ podpisane typy całkowite + typy całkowite bez znaku + typy wyliczone;17prawdziwe typy = typy całkowite + prawdziwe typy pływające;18typy arytmetyczne = typy całkowite + typy pływające;20typy pochodne = typy tablic, typy struktur, typy unii, typy funkcji, typy wskaźników, typy atomowe;21typy skalarne = typy arytmetyczne + typy wskaźników;21typy agregatów = typy tablic + typy struktur;24pochodne typy deklaratorów = typy tablic + typy funkcji + typy wskaźników.I ostateczna struktura systemu typu 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
Teraz muszę zredukować strukturę (najlepiej do pojedynczego drzewa) lub znaleźć bardziej skomplikowany sposób reprezentowania relacji. Chciałbym wyjść z ładną karteczką do systemu pisania C11. Jakieś pomysły?