programing

C11 유형 계층 구조 이해

minimums 2023. 9. 25. 22:28
반응형

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단계 알고리즘을 제안합니다.

  1. 모든 확장 정수 유형의 제거(엄격하게 준수하는 구현 가정)
  2. 표준 정수형의 감소(더 이상 칸막이형이 아니기 때문에);
  3. 구조물 그룹화:
    1. 스칼라 유형집합 유형의 하위 트리 쌍(트리로 표시됨),
    2. 기본 형식파생 형식 한 쌍의 하위 트리(색 영역으로 표시),
    3. 실제 유형파생 선언자 유형(이 중 입력된 하위 regions로 표시됨),
    4. 문자 유형(다른 텍스트 색상으로 표시됨)
  4. 규격 외 생산 적용 : 객체형 = 스칼라형 + 집합형
  5. 누락된 결합 유형 원자 유형개체 유형을 보완합니다.

결과적인 C11 유형의 시스템 요약은 다음과 같습니다.

C11 type hierarchy

회색 스트로크/영역은 트리의 가독성을 높이기 위해 도입됩니다.

유형 요약은 번역 단위 내의 특정 지점에서 관찰되는 상태이기 때문에 "유형 선언 완전성"의 개념을 포함하지 않습니다.런타임에서, 모든 객체와 함수는 완전한 형태의 인스턴스이다.voidtype은 예외이지만 no-type(또는 포인터의 경우 임의의 type)으로 다이어그램에서 의도적으로 제외됩니다.

const,volatile,restrict그리고._Atomic는 파생된 유형유형 지정자와 반대로 재귀적으로 적용할 수 없는 유형 한정자입니다.이들의 조합은 모든 유형 정의를 추가할 수 있습니다(이해가 되는 한).따라서 다이어그램에 이러한 정보를 포함하면 문제가 복잡해질 뿐만 아니라 적합한 정보는 소개하지 못합니다.명백한 예외는 다음을_Atomic (type)C11 표준에 나열된 파생 유형 중 하나인 원자 유형에 대한 유형 지정자로 간주되는 construct.

언급URL : https://stackoverflow.com/questions/20448882/understanding-the-c11-type-hierarchy

반응형