簡體   English   中英

C 預處理器:從給定的枚舉值聲明結構數據

[英]C preprocessor: declare structure data from a given enum value

我試圖從枚舉值自動聲明給定的數據結構。 一個簡單的例子勝過千言萬語:

#define X_FIELDS \
    X(A, upd_foo) \
    X(B, upd_bar)

enum MSGS_TYPES {
#define X(msg_type, data_type) msg_type,
    X_FIELDS
#undef X
    MSGS_SIZE
};

#define DECLARE_MSG(name, type)           X(type) name = { type };  

typedef struct {
    enum MSGS_TYPES type;
    int x;
} upd_foo;

typedef struct {
    enum MSGS_TYPES type;
    int y;
} upd_bar;

int main() {
    DECLARE_MSG(msg, B);     
    printf("%d\n", msg.type);
    msg.y = 0;
    return 0;
}

在這里,我希望 DECLARE_MSG 宏聲明
upd_bar msg = { B };
有什么方法可以實現嗎?

請注意,我已經嘗試過類似的東西:

#define T_A    upd_foo
#define T_B    upd_bar

#define _T(type)  T_type
#define X(type)   _T(type)
#define DECLARE_MSG(name, type)           X(type) name = { type };  

但它顯然不起作用,抱怨“T_type”是一個未知的類型名稱。

非常感謝!

T_type被認為是單個標記,並且在宏擴展中找不到type參數。

您需要使用連接運算符##

#define _T(type)  T_##type

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM