C (ANSI, C99 등)에서 구조체는 자체 네임 스페이스에 존재합니다. 링크 된리스트를위한 구조체는 다음과 같습니다 :
struct my_buffer_type {
struct my_buffer_type * next;
struct my_buffer_type * prev;
void * data;
};
그러나 대부분의 C 프로그래머는 다음과 같은 구조체를 자동으로 입력하는 것이 당연합니다.
typedef struct tag_buffer_type {
struct tag_buffer_type * next;
struct tag_buffer_type * prev;
void * data;
} my_buffer_type;
그런 다음 일반 유형처럼 구조체를 참조하십시오 get_next_element(my_buffer_type * ptr)
.
이제 내 질문은 : 이것에 대한 특별한 이유가 있습니까?
Wikipedia에 따르면 http://en.wikipedia.org/wiki/Typedef#Usage_concerns
일부 사람들은 typedef의 광범위한 사용에 반대합니다. 대부분의 주장은 typedef가 단순히 변수의 실제 데이터 유형을 숨긴다는 아이디어에 중점을 둡니다. 예를 들어 Linux 커널 해커이자 문서 작성자 인 Greg Kroah-Hartman은 함수 프로토 타입 선언 이외의 용도로는 사용하지 않는 것이 좋습니다. 그는이 관행이 불필요하게 코드를 난독화할뿐만 아니라 프로그래머가 실수로 큰 구조를 단순 유형으로 생각하여 실수로 오용 할 수 있다고 주장했다. [4]
다른 사람들은 typedef를 사용하면 코드를 더 쉽게 유지할 수 있다고 주장합니다. K & R은 typedef를 사용하는 데는 두 가지 이유가 있다고 말합니다. 첫째, 프로그램의 이식성을 높이는 수단을 제공합니다. 프로그램의 소스 파일 전체에 표시되는 모든 곳에서 유형을 변경하지 않고 단일 typedef 문만 변경하면됩니다. 둘째, typedef는 복잡한 선언을 이해하기 쉽게 만들 수 있습니다.
struct
때로는 typedef'd 구조체를 사용하지 않는 별도의 네임 스페이스를 사용 하는 것의 이점이 충분하지 않으며 다른 C 프로그래밍 문화가 있기 때문에 (Windows C 프로그래밍은 Linux C 프로그래밍과는 다른 전통이 있습니다) 다른 경우 내가 알지 못하는 전통.
그런 다음 역사적 고려 사항 (전임자, C의 첫 번째 버전)에 관심이 있습니다.
typedef
입니다 변수의 실제 유형을 숨 깁니다. 가지고time_t
예를 들어 : 사람들이 주위에 기본 정수 유형을 사용하여 이동하는 경우, 이러한 구현의 변화의 코드 엄청 많이 끊어집니다 2038에서 요구 될 일이었다. people 사람들이 이유를 이해하지 않고 구조를 사용한다면, 이는 구조가 아니라 프로그래머의 실패입니다.