在标头中使用ifdef linux etc是否有意义?

时间:2019-04-13 13:14:36

标签: c macros cross-platform software-design

我读了一些有关使用#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_structstruct my_macos_struct的实现目的相同,但完全不同。

因此,对于每个定义平台结构(cstruct my_linux_struct)的平台,我都有一个专用的struct my_macos_struct文件。

以不同的方式命名结构的好处是避免了实现中的名称冲突。

写这样的条件宏是一种惯例吗?否则我们应该避免写这样的东西。

1 个答案:

答案 0 :(得分:1)

  

写这样的条件宏是一种惯例吗?否则我们应该避免写这样的东西。

两者之间的半途而废。

最好将差异放在.c文件中,但还是要避免“在可能的情况下”。

从.h文件中保留平台特定的代码更好,但不是 law