"typedef"는 유형과 에일리어스 사이에 표준 적합성이 있습니까?
우연히 어떤 코드를 발견했는데typedef
키워드는 에서와 같이 타입과 에일리어스 이름 사이에 있습니다.
int typedef INT;
gcc 및 clang으로 컴파일됩니다(실시간 예).나는 표준어를 잘 이해하지 못한다.그래서 제가 묻고 싶은 것은 이것이 표준규격에 적합한가?컴파일러에 의한 지원도 가능합니까?
그typedef
키워드는 C에서 스토리지 클래스 지정자로 분류되지만 표준에서는 형식 언어 구문을 표현하는 데 편리하다고 명시되어 있습니다.그럼에도 불구하고 그 뒤를 잇는다typedef
다음과 같은 다른 스토리지 클래스 지정자와 동일한 위치에 표시할 수 있습니다.extern
또는static
가 표시될 수 있습니다.[C2011, 6.7.1/5]
실제로 이 구문을 사용하면 선언에서 스토리지 클래스 지정자를 유형 지정자, 유형 한정자 및 기타 "선언 지정자"와 함께 사용할 수 있습니다.[C2011, 6.7/1, 6.7/6]
따라서, 네, 이 명령어를 붙이는 것은 유효합니다.typedef
키워드 뒤에 입력합니다(예시 참조).
TL/DR 버전
네.int typedef INT
일치하고 있습니다.
제임스 미치너 버전
C 선언 구문(C 2011 온라인 초안):
6.7 선언
구문
1declaration:
declaration-specifiers init-declarator-listopt ;
static_assert-declaration
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
alignment-specifier declaration-specifiersopt
...
즉, 단일 선언에서 하나 이상의 선언 지정자를 사용할 수 있습니다. 여기서 각 선언 지정자는 스토리지 클래스 지정자( )가 될 수 있습니다.auto
,extern
,static
,typedef
타입 지정자( )int
,float
,char
, 등), 타입 한정자(const
,restrict
,volatile
, 등), 함수 지정자(inline
또는 정렬 지정자를 지정합니다.
다양한 지정자가 나타나는 순서는 중요하지 않습니다.static const short int x;
라고 쓸 수 있다int static short const x
, 또는int short const static x
, 등. 대부분의 사람들은 스토리지 클래스 지정자를 먼저 배치하고, 그 다음에 함수 또는 정렬 지정자(필요한 경우), 그 다음에 유형 한정자, 유형 지정자를 차례로 배치하므로,static const short int x
대부분의 사람들이 그 선언문을 어떻게 쓰느냐가 문제죠
이 구문을 통해 다음과 같은 유형을 작성할 수 있습니다.long double
또는long long
또는unsigned long int
,기타.
구문은 임의(임의로 긴) 유형 지정자 시퀀스를 허용하지만, 상대적인 몇 개만 허용하는 의미 규칙이 있습니다.글씨를 쓸 수 없다short short short short x
예를 들어, 또는long long long double y
. 다음 시퀀스만 허용됩니다.
제약
2 각 선언의 선언 지정자 및 각 구조 선언 및 형식 이름의 지정자 한정자 리스트에 적어도 하나의 형식 지정자를 부여해야 한다.유형 지정자의 각 목록은 다음 다중 집합 중 하나여야 합니다(항목당 여러 개의 다중 집합이 있는 경우 쉼표로 구분). 유형 지정자는 임의의 순서로 발생할 수 있으며 다른 선언 지정자와 혼합될 수 있습니다.
--void
--char
--signed char
--unsigned char
--short, signed short, short int, or signed short int
--unsigned short, or unsigned short int
--int, signed, or signed int
--unsigned, or unsigned int
--long, signed long, long int, or signed long int
--unsigned long, or unsigned long int
--long long, signed long long, long long int, or
signed long long int
--unsigned long long, or unsigned long long int
--float
--double
--long double
--_Bool
--float _Complex
--double _Complex
--long double _Complex
: atomic " " "
: structure '유니온'
: " 형 : 「 」
: typedef 이름
부록
한 바와 , 향후 으로 스토리지 될 수 .따라서 Keith는 다음과 같습니다.int typedef INT
는 미래의 컴파일러에서는 합법적이지 않을 수 있습니다.
.1 7.1/1에 .decl-specifier:
A는 다음과 .type-specifier
및typedef
키워드는 문법의 같은 포인트에 있기 때문에, 질문에서와 같이 그것들을 교환할 수 있습니다(단, 이와 같이 코드를 쓰는 것은 전혀 관용적이지 않습니다).
decl-specifier:
storage-class-specifier type-specifier function-specifier friend typedef
컴파일 방법:
gcc - c - Wall - Wextra - pedantic - Wconversion - std = 182499
은 '우리'를 의미합니다.-Wold-style-declaration
설정되었습니다.
그러면 컴파일러는 다음 경고 메시지를 출력합니다.
warning: 'typedef' is not a beginning of declaration [-Wold-style-declaration]
이 파라미터를 설정하지 않으면 컴파일러는 문제없이 구문을 처리합니다.
따라서 게시된 구문은 표준 범위 내에 있지만 독자에게 혼란을 줄 수 있습니다.
typedef int INT
typedef를 사용하는 RightWay
INT를 사용하는 곳이라면 어디서든 int 데이터 타입으로 대체됩니다.
이 주요 목적은 단순한 값으로 긴 데이터 문자열에 대해서만 사용되지만 이 경우 일반 int 자체를 사용할 수 있습니다.
테스트용으로만 릴레이 할 수 있습니다.디버깅을 사용하면 충분히 이해할 수 있습니다.
언급URL : https://stackoverflow.com/questions/35228738/is-typedef-in-between-the-type-and-the-alias-standard-conformant
'programing' 카테고리의 다른 글
저장소에서 값을 변경한 후 컴포넌트의 함수를 호출하는 방법은 무엇입니까? (0) | 2022.08.15 |
---|---|
프로포스를 갱신할 때 VueJS 컴포넌트 데이터 속성 갱신 (0) | 2022.08.15 |
Graphql 아폴로 서버 + Vue = > 이미지 업로드 (0) | 2022.08.11 |
Vue.js 앱의 vuex 스토어를 사용하여 하위 구성 요소(설정 페이지)에서 값을 설정하는 방법은 무엇입니까? (0) | 2022.08.11 |
내 컴퓨터의 Java SDK 폴더는 어디에 있습니까?우분투 12.04 (0) | 2022.08.11 |