구조체 내의 멤버변수들의 옵셋위치를 구하는 매크로.

멤버변수들의 데이터형은 컴파일 옵션에 따라 그 크기가 달라질 수 있는데다가,

변수의 순서에 따라 옵셋은 컴파일시에 최적화되어 결정되므로 그 값은 계산하기 참 복잡스럽다.

일반적인 프로그래밍 상황에서는 쓸일이 없는 매크로긴 하다.^^


#define STRUCT_FIELD_OFFSET(type, field)    \

    ((unsigned int)(((char *)(&(((type*)NULL)->field)))-((char *)NULL)))

/* type: 구조체 타입명, field: 멤버변수명 */


#define MAX_LEN    128

struct Sample_struct {

    char *              cp_1st_field;

    int                     i_2nd_field;

    unsigned short  us_3rd_field;

    char                  ca_4th_field[MAX_LEN];

    unsigned short  us_5th_field;

    void*                 ptr_6th_field;

};

typedef struct Sample_struct sample_t;


저 구조체의 각 멤버들의 옵셋값을 눈으로 계산하긴 거시기하다.

더구나 그 안에 구조체가 또 들어있으면 그냥 포기하는게 낫다.

이럴때 써먹을 매크로이긴 한데.......

예전에는 코드최적화나 자동화코드, 호환성 이따위를 고려할때 종종 써먹었는데...이제는.....


마땅히 써먹을만한 곳은 생각이 안남. 

요즘은 그런 코드 작성할 일이 없다. 요구하지도 않고...그럴 이유도 찾을수가 없다.



Posted by Jason Ryu
,