C11 유형 계층 구조 이해
C11 언어의 유형 계층 구조를 완전히 이해하고 그래픽으로 표현하고 싶습니다(트리 다이어그램이 완벽할 것입니다).이 표준은 이 문제에 대한 수치를 제공하지 않습니다. 즉, 개별 유형 및 유형 간의 관계를 설명하는 30개의 항목이 있습니다.그리고 싶습니다.
저의 시도는 ISO/IEC 9899:201x 위원회 초안 N1570을 입수하여 문서의 섹션 6.2.5에서 모든 필수 문구를 추출하는 것에서 시작되었습니다.그리고 나무의 형태로 지식을 재배열하기 시작했습니다.제 작품을 두 단계로 나누어 발표하겠습니다.
1단계: 포인트 1~15
추출된 지식(섹션 6.2.5 + 지정 생산):
- 1가지 유형 = 객체 유형 + 함수 유형;
- 표준 부호 정수 유형 4개 =
signed char
,short int
,int
,long int
,long long int
; - 부호 정수형 4종 = 표준 부호 정수형 + 확장 부호 정수형;
- 부호 없는 표준 정수 유형 6개 =
_Bool
,unsigned char
,unsigned short int
,unsigned int
,unsigned long int
,unsigned long long int
; - 비부호 정수 타입 6개 = 표준 비부호 정수 타입 + 확장 비부호 정수 타입;
- 7가지 표준 정수 유형 = 표준 부호 정수 유형 + 표준 부호 없는 정수 유형;
- 7가지 확장 정수 유형 = 확장 부호 정수 유형 + 확장 부호 없는 정수 유형;
- 실제 부유식 10종 =
float
,double
,long double
; - 11가지 복합형 =
float _Complex
,double _Complex
,long double _Complex
; - 플로팅 타입 12개 = 리얼 플로팅 타입 + 복합 타입;
- 기본형 14종 =
char
있는 + 없는 + +형 +형 +형; - 15자 타입 =
char
,signed char
,unsigned char
.
그리고 그에 따른 구조:
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
2단계: 16~24점
나머지 문장은 다음
- 열거형 16종;
- 17개 정수형 =
char
+ 정수형 + ; +형 +형 +형; - 17개의 실수형 = 정수형 + 실수형 부동형;
- 18 산술형 = 정수형 + 부동형;
- 20가지 파생형 = 배열형, 구조형, 조합형, 함수형, 포인터형, 원자형;
- 21가지 스칼라 유형 = 산술 유형 + 포인터 유형;
- 21개 Aggregate 유형 = 배열 유형 + 구조 유형;
- 24개의 파생된 선언자 유형 = 배열 유형 + 함수 유형 + 포인터 유형.
그리고 최종 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
이제 저는 (이상적으로) 구조를 단일 트리로 줄이거나 관계를 표현하기 위한 더 까다로운 방법을 찾아야 합니다.저는 C11 타이핑 시스템을 위한 멋진 치트 시트를 출시하고 싶습니다.무슨 생각 있어요?
질문의 두 번째 단계에서 발생하는 C11 유형의 어수선한 구조는 덜 중요한 노드를 제거/축소하고 일부 중복/보조 정보를 다른 방법으로 제공하도록 위임함으로써 단순화될 수 있습니다.
이를 위해 다음과 같은 5단계 알고리즘을 제안합니다.
- 모든 확장 정수 유형의 제거(엄격하게 준수하는 구현 가정)
- 표준 정수형의 감소(더 이상 칸막이형이 아니기 때문에);
- 구조물 그룹화:
- 스칼라 유형 대 집합 유형의 하위 트리 쌍(트리로 표시됨),
- 기본 형식 대 파생 형식 한 쌍의 하위 트리(색 영역으로 표시),
- 실제 유형 및 파생 선언자 유형(이 중 입력된 하위 regions로 표시됨),
- 문자 유형(다른 텍스트 색상으로 표시됨)
- 규격 외 생산 적용 : 객체형 = 스칼라형 + 집합형
- 누락된 결합 유형 및 원자 유형의 개체 유형을 보완합니다.
결과적인 C11 유형의 시스템 요약은 다음과 같습니다.
회색 스트로크/영역은 트리의 가독성을 높이기 위해 도입됩니다.
유형 요약은 번역 단위 내의 특정 지점에서 관찰되는 상태이기 때문에 "유형 선언 완전성"의 개념을 포함하지 않습니다.런타임에서, 모든 객체와 함수는 완전한 형태의 인스턴스이다.void
type은 예외이지만 no-type(또는 포인터의 경우 임의의 type)으로 다이어그램에서 의도적으로 제외됩니다.
그const
,volatile
,restrict
그리고._Atomic
는 파생된 유형의 유형 지정자와 반대로 재귀적으로 적용할 수 없는 유형 한정자입니다.이들의 조합은 모든 유형 정의를 추가할 수 있습니다(이해가 되는 한).따라서 다이어그램에 이러한 정보를 포함하면 문제가 복잡해질 뿐만 아니라 적합한 정보는 소개하지 못합니다.명백한 예외는 다음을_Atomic (type)
C11 표준에 나열된 파생 유형 중 하나인 원자 유형에 대한 유형 지정자로 간주되는 construct.
언급URL : https://stackoverflow.com/questions/20448882/understanding-the-c11-type-hierarchy
'programing' 카테고리의 다른 글
Oracle Database IP를 가져오는 방법? (0) | 2023.09.25 |
---|---|
XPath로 네임스페이스를 무시하는 방법 (0) | 2023.09.25 |
Oracle Partition - Error ORA14400 - 삽입된 Partition Key가 어떤 Partition에도 매핑되지 않음 (0) | 2023.09.25 |
PHP 명령 동기화 안 됨 오류 (0) | 2023.09.25 |
mysql 타임스탬프를 실제 날짜와 시간으로 변환하시겠습니까? (0) | 2023.09.20 |