TAKEAWAY 6.29 typedef 안에 struct의 태그 이름과 동일한 식별자를 사용하여 전방 선언할 수 있다.
C++도 기본적으로 이와 비슷한 방식을 따른다. 그래서 이런 식으로 작성하면 C++에 익숙한 이들도 코드를 쉽게 읽을 수 있다.
typedef 메커니즘은 구조체가 아닌 타입에도 얼마든지 적용할 수 있다. 가령 다음과 같이 배열 선언에도 활용할 수 있다.
typedef double vector[64]; typedef vector vecvec[16]; vecvec A; typedef double matrix[16][64]; matrix B; double C[16][64];
여기서 typedef는 기존 타입에 대해 이름만 새로 만들 뿐이다. 그래서 A, B, C의 타입은 double [16][64]로 모두 같다.
TAKEAWAY 6.30 typedef는 타입에 대한 별칭(alias)만 만들 뿐, 새로운 타입을 만드는 것이 아니다.
C 표준에서는 내부적으로 typedef를 매우 많이 쓴다. 대표적인 예로 5.2절에서 본 size_t와 같은 의미상 정수 타입(semantic integer type)이 그렇다. C 표준에서는 typedef로 정의한 이름 뒤에 _t를 붙이는 경우가 많다. 이러한 명명 규칙을 따르면 향후 버전의 표준에서 같은 이름을 사용하더라도 기존 코드와 충돌하지 않는다. 따라서 코드에서 이런 이름을 직접 정의하면 안 된다.
TAKEAWAY 6.31 _t로 끝나는 식별자 이름은 예약어이므로 사용하지 않는다.