Ssup2 Blog logo Ssup2 Blog

offsetof() Macro 함수를 분석한다.

1. offsetof()

1
#define offsetof(TYPE, MEMBER) ((sizet) &((TYPE *)0)->MEMBER)
[Code 1] offsetof() Macro 함수

offsetof() Macro 함수는 Struct를 구성하는 Member 변수의 Memory Offset을 구하는 함수이다. [Code 1]은 offsetof() Macro 함수를 나타내고 있다. offsetof() Macro 함수는 다음과 같이 동작한다.

2. 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

struct offset{
    int a;
    int b;
    char c;
    double d;
    int e;
};

int main(void)
{
    printf("a : %d\n", offsetof(struct offset, a));
    printf("b : %d\n", offsetof(struct offset, b));
    printf("c : %d\n", offsetof(struct offset, c));
    printf("d : %d\n", offsetof(struct offset, d));
    printf("e : %d\n", offsetof(struct offset, e));

    return 0;
}
[Code 2] offsetof() MACRO 함수 예제
a : 0
b : 4
c : 8
d : 12
e : 20
[Shell 1] offsetof() MACRO 함수의 예제 출력

offsetof() Macro 함수를 통해서 offset Struct의 각 Member 변수의 Memory Offset을 확인할 수 있다.