我读了一些有关使用#ifdef #elif
etc宏的文章,以便为各种平台提供实现,几乎每个人都说,如果可能,应该避免使用它,因为它很难维护。但是我目前正在考虑其在头文件中的用法,如下:
#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
文件。
以不同的方式命名结构的好处是避免了实现中的名称冲突。
写这样的条件宏是一种惯例吗?否则我们应该避免写这样的东西。
答案 0 :(得分:1)
写这样的条件宏是一种惯例吗?否则我们应该避免写这样的东西。
两者之间的半途而废。
最好将差异放在.c文件中,但还是要避免“在可能的情况下”。
从.h文件中保留平台特定的代码更好,但不是 law 。