[완료] C에서 #define foo(a, b) ( (size_t) & ((a)NULL) -> b) 이해가 안됩니다 -_-;;
글쓴이: hbull / 작성시간: 화, 2009/11/10 - 3:33오후
안녕하세요?
책에서 프로그래밍 관련 책에서 본 C 소스 코드 인데요,
위에 define 은 해당 구조체에서 변수의 오프셋을 출력하는 선언문이라고 하네요,
실제 아래와 같이 코딩 하면 8이라고 출력되는데, 당췌 왜 그런지 모르겠네요. -_-;;
고수님들의 답변 부탁드립니다,
#define foo(a, b) ( (size_t) & ((a)NULL) -> b)
struct Rectangle
{
int top;
int left;
int bottom;
int right;
};
int main()
{
int a;
a = foo(Rectangle*, bottom);
printf("%d", a);
}
Forums:
offsetof()
stddef.h에 정의된
offsetof() 매크로와 같은겁니다.
이렇게 생각하시면 쉽습니다.
struct Rectangle t;
t를 생각할 때,
(int)&t.bottom - (int)&t.top
이러면, 8이 나오겠죠?
(int)&t.bottom - (int)&t
이래도 같겠죠?
struct Rectangle *t = 0;
이라고 할 때,
(int)&t->bottom - (int)t;
이러면 8이 나오겠죠?
근데, t는 0이잖아요.
즉,
(int)&(((struct Rectangle&)0)->bottom)
이러면, 8입니다.
구조체를 0번지부터
구조체를 0번지부터 시작할때 bottom 맴버는 8번지인데.. 그걸출력한것..
말그대로 오프셋출력하는매크로.
댓글 달기