2016-12-08 2 views
1

XMacroテーブルから構造体に値を代入しようとしています。XMacroの構造体

構造体のこの値に「オフセット」を割り当てる他の方法はありますか?

typedef enum Time_Unit_Tag 
{ 
    NO_UNIT, 
    HOUR, 
    MINUTES, 
    SECONDS, 
    TOTAL_UNITS 
} Time_Unit_T; 

enum 
{ 
    OFFSET_HOUR = 0, 
    OFFSET_MIN = 2, 
    OFFSET_SEC = 4 
}; 

#define CHANGE_TIME \ 
TIME(HOUR, "HOUR" , OFFSET_HOUR)\ 
TIME(MINUTES, "MINUTES", OFFSET_MIN)\ 
TIME(SECONDS, "SECONDS", OFFSET_SEC)\ 

#undef TIME 
#define TIME(unit, desc, offset)\ 
if(count == unit)\ 
{\ 
    P(desc)\ 
    format_clock.offset = offset;\ 
}\ 
+0

」から「offestof」を使用しますか? –

+0

あなたは何をしようとしていますか? Xマクロはまったく必要ですか? –

+0

構造体にmarcoテーブルから取得した値を割り当てようとしています –

答えて

0

構造、3つの項目

struct { 
    Time_Unit_T unit; 
    char *desc; 
    int offset; // could also use enum{}, but the one above has no tag 
} mystruct[3] 

とそれのxマクロで

= { 
#define TIME(u, d, o) { u, d, o }, 
CHANGE_TIME 
}; 

は、あなたが右に新しいインナーマクロを定義し初期化するための実際の配列を作りますフォーマット。ここでは{ u, d, o },イニシャライザの形式です。