我读了一些关于使用#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
的实施完全不同。
所以我为每个平台都有一个专用的c
文件,其中定义了平台的结构(struct my_linux_struct
或struct my_macos_struct
)。
我通过不同地命名结构来获得的好处是避免在实现中发生名称冲突。
这样编写条件宏是一种常见的做法吗?或者我们应该尽可能避免写这些东西。
这样编写条件宏是一种常见的做法吗?或者我们应该尽可能避免写这些东西。
两者之间的中途。
最好将差异放在.c文件中,但不要“尽可能避免”。
保持.h文件中特定于平台的代码更好,但不是法律。