簡體   English   中英

我可以在 C 中 typedef struct aaa struct x_aaa 嗎?

[英]Can I typedef struct aaa struct x_aaa in C?

我使用公共圖書館。 它在較新版本中將其結構從 struct aaa 更改為 struct x_aaa。 我想在庫的任何版本中保持我的代碼傳遞編譯。 所以我想這樣做:

#if lib_ver > 20000
typedef struct x_aaa struct aaa;
#endif

然后在后面的代碼中使用 strcut aaa 。 但這行不通。 你如何解決這樣的問題?

typedef 名稱必須是單個標識符,因此您不能這樣做。
(typedef 與變量聲明具有相同的形式,在其前面添加了“typedef”一詞。)

您可以使用取決於版本的 typedef

#if lib_ver > 20000
    typedef struct x_aaa lib_aaa;
#else
    typedef struct aaa lib_aaa;
#endif

並更改您的代碼以使用lib_aaa而不是完整的結構名稱。

您也可以使用宏,但最好避免使用它們:

#if lib_ver > 20000
    #define aaa x_aaa;
#endif

但是,即使您編譯代碼,重命名聽起來也可能是一個重大更改。
我會對此非常謹慎。

你不能typedef一個struct somethingstruct something_else

你可以做的是typedef一個struct somethingsomething_else (下降字struct )。

如果這不是你想要的,你應該使用一個簡單的#define

#define aaa x_aaa
typedef struct aaa bbb;
//      ^^^^^^^^^^      source type
//                 ^^^  new identifier

您不能將現有類型的新標識符設為“struct something”。

您可能需要更改代碼以反映您使用的結構在所有版本的庫中都不相同

#if lib_ver > 20000
#typedef struct x_aaa libaaa
#else
#typedef struct aaa libaaa
#endif

// in your code use `libaaa` instead of `struct aaa`
//struct aaa foo;
libaaa foo;
//struct x_aaa bar;
libaaa bar;

暫無
暫無

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

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