![](/img/trans.png)
[英]Does it make sense to use _attribute__ ((nothrow)) inside extern C?
[英]Does it make sense to use ifdef linux etc in header?
我讀了一些關於使用#ifdef #elif
等宏來為各種平台提供實現的文章,幾乎每個人都說如果可能的話應該避免它,因為它很難維護。 但是我目前正在考慮它在頭文件中的用法如下:
#ifdef __linux__
typedef struct my_linux_struct my_struct
#elif __APPLE__
typedef struct my_macos_struct my_struct
#else
#error Platform not supported
#endif
盡管服務於相同的目的, struct my_linux_struct
和struct my_macos_struct
是完全不同的。
因此,對於定義了平台結構( struct my_linux_struct
或struct my_macos_struct
)的每個平台,我都有一個專用的c
文件。
我從以不同方式命名結構的好處是避免實現中的名稱沖突。
像這樣編寫條件宏是一種常見的做法嗎? 或者我們應該盡可能避免寫這樣的東西。
像這樣編寫條件宏是一種常見的做法嗎? 或者我們應該盡可能避免寫這樣的東西。
介於兩者之間。
最好將差異放在 .c 文件中,但不是“盡可能”避免的東西。
將特定於平台的代碼保留在 .h 文件之外更好,但不是法律。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.