__typeof__(x)
예시로 보는 것이 제일 효과적일 것 같다.
int x;
__typeof__(x) i;
y = (__typeof__(x)) j; // equiavalent as y = (int) j;
int arr[2];
//아래는 전부 동일 - int k[2]와 같다.
__typeof__(int[2]) k;
__typeof__(arr) k;
위에서 알 수 있듯이, 어떠한 객체 혹은 자료형을 인자로 받아 그 자료형에 해당하는 expression으로 치환해 주는 역할을 한다.
어디에 쓸 수 있을까?
매크로 함수에 적합한데, 예시를 보면 이해가 잘 될 것이다.
#define SWAP(a,b) { __typeof__(a) temp; temp = a; a = b; b = temp; }
자료형이 정해져 있지 않은 매크로 함수의 단점을 해결할 수 있다.
참고 자료