이것은 간단한 질문처럼 보이지만 스택 오버플로 검색이나 Google에서 찾을 수 없습니다. 유형 뒤에는 _t
평균이 무엇입니까? 와 같은
int_t anInt;
C 코드에서는 하드웨어와 밀접하게 관련되어 있다는 것을 알 수 있습니다. 하드웨어와 관련이 있다고 생각할 수는 없습니다.
답변
Douglas Mayle이 언급했듯이 기본적으로 유형 이름을 나타냅니다. 결과적으로 _t
혼동을 일으킬 수 있으므로 변수 또는 함수 이름을 ‘ ‘ 로 끝내는 것이 좋지 않습니다 . 뿐만 아니라으로 size_t
는 C89 표준을 정의 wchar_t
, off_t
, ptrdiff_t
, 아마 일부 다른 내가 잊어 버린. C99 표준은 다음과 같은 추가 유형의 많은 정의 uintptr_t
, intmax_t
, int8_t
, uint_least16_t
, uint_fast32_t
, 등을. 이러한 새로운 유형은 공식적으로 정의되어 <stdint.h>
있지만 가장 일반적 <inttypes.h>
으로 표준 C 헤더의 경우를 포함하여 사용 <stdint.h>
합니다. 그것은 ( <inttypes.h>
)도 사용하기 위해 매크로를 정의 printf()
하고 scanf()
.
Matt Curtis가 언급했듯이 접미사에서 컴파일러에는 아무런 의미가 없습니다. 인간 중심의 협약입니다.
그러나 POSIX 는 ‘ _t
‘로 끝나는 많은 추가 유형 이름을 정의 하고 구현을위한 접미사 를 예약합니다 . 즉, POSIX 관련 시스템에서 작업하는 경우 규칙을 사용하여 고유 한 유형 이름을 정의하는 것은 바람직하지 않습니다. 내가 작업하고있는 시스템은 (20 년 이상) 그것을 해왔다. 우리는 정의한 것과 같은 이름을 가진 유형을 정의하는 시스템에 의해 정기적으로 트립됩니다.
답변
데이터 유형의 이름을 지정하는 데 사용되는 규칙입니다 (예 typedef
:
typedef struct {
char* model;
int year;
...
} car_t;
답변
은 _t
일반적으로 불투명 한 유형 정의를 랩합니다.
GCC _t
는 표준 C 및 POSIX (GNU C 라이브러리 매뉴얼)의 향후 버전과의 충돌을 피하기 위해 사용하지 않을 예약 네임 스페이스로 끝나는 이름 만 추가합니다 . 약간의 연구 끝에 마침내 POSIX Standard (1003.1, Rationale (Informative)) 내에서 올바른 참조가 발견되었습니다.
B.2.12 자료형
이 섹션에 정의 된 추가 유형이 ”_t ”로 끝나야한다는 요구 사항은 네임 스페이스 오염 문제로 인해 발생했습니다. 하나의 헤더 파일에서 유형 (IEEE Std 1003.1-2001에 의해 정의 된 유형이 아님)을 정의하고 프로그램의 네임 스페이스에 기호를 추가하지 않고 다른 유형에서 사용하는 것은 어렵습니다. 구현자가 고유 한 유형을 제공 할 수 있도록하기 위해 모든 적합한 응용 프로그램은 ”_t ”로 끝나는 기호를 피해야하며 구현자가 추가 유형을 제공 할 수 있습니다. 유형의 주요 용도는 IEEE Std 1003.1-2001에 정의 된 구조에 추가 될 수있는 (그리고 많은 경우에) 구조 멤버의 정의에 있으므로 추가 유형에 대한 필요성이 절실합니다.
간단히 말해서 표준에 따르면 표준 유형 목록을 확장 할 가능성이 높으므로 표준에 따라 _t
네임 스페이스가 자체 사용을 제한합니다 .
예를 들어, 프로그램이 POSIX 1003.1 Issues 6 과 일치 하고 유형을 정의했습니다 foo_t
. POSIX 1003.1 이슈 7 은 결국 새로 정의 된 유형으로 릴리스됩니다 foo_t
. 프로그램이 새 버전과 일치하지 않아 문제가 될 수 있습니다. 사용을 제한하면 _t
코드를 리팩터링 할 수 없습니다. 따라서 POSIX 준수를 목표로하는 _t
경우 표준에서 명시한대로 반드시 피해야 합니다.
참고 : 개인적으로 POSIX를 고수하려고 노력합니다. POSIX는 깨끗한 프로그래밍을위한 좋은 기초를 제공한다고 생각하기 때문입니다. 또한 저는 Linux Coding Style (5 장) 지침을 매우 좋아 합니다. typedef를 사용하지 않는 데에는 몇 가지 이유가 있습니다. 이 도움을 바랍니다!
답변
데이터 유형에 대한 표준 명명 규칙이며 일반적으로 typedef로 정의됩니다. 하드웨어 레지스터를 다루는 많은 C 코드는 부호있는 및 부호없는 고정 크기 데이터 유형에 C99 정의 표준 이름을 사용합니다. 일반적으로 이러한 이름은 표준 헤더 파일 (stdint.h)에 있으며 _t로 끝납니다.
답변
“유형”을 의미하는 규칙 일뿐입니다. 컴파일러에게는 특별한 의미가 없습니다.
답변
는 _t
본질적으로 특별한 의미가 없습니다. 그러나 _t
typedef에 접미사를 추가하는 것이 일반적으로 사용되었습니다 .
변수 이름 지정에 대한 일반적인 C 관행에 더 익숙 할 수 있습니다 … 이것은 포인터 앞에 ap를 붙이고 전역 변수 앞에 밑줄을 사용하는 것이 일반적입니다 (약간 덜 일반적입니다) , 변수 이름을 사용하는 i
, j
및 k
임시 루프 변수를.
단어 크기와 순서가 중요한 코드에서는 BYTE
WORD
(일반적으로 16 비트) DWORD
(32 비트) 와 같이 명시적인 사용자 정의 형식을 사용하는 것이 매우 일반적 입니다.
int_t
의 정의는 int
플랫폼마다 다르기 때문에 그다지 적합하지 않습니다 int
. (현재 대부분의 PC 중심 개발에서는 32 비트로 처리하지만 비 PC 개발에서는 여전히 int를 16 비트로 처리합니다).
답변
타입을 의미합니다. size_t
크기 유형입니다.
