在头文件中使用ifdef linux等是否有意义?

问题描述 投票:1回答:1

我读了一些关于使用#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_structstruct my_macos_struct的实施完全不同。

所以我为每个平台都有一个专用的c文件,其中定义了平台的结构(struct my_linux_structstruct my_macos_struct)。

我通过不同地命名结构来获得的好处是避免在实现中发生名称冲突。

这样编写条件宏是一种常见的做法吗?或者我们应该尽可能避免写这些东西。

c macros cross-platform software-design
1个回答
1
投票

这样编写条件宏是一种常见的做法吗?或者我们应该尽可能避免写这些东西。

两者之间的中途。

最好将差异放在.c文件中,但不要“尽可能避免”。

保持.h文件中特定于平台的代码更好,但不是法律。

© www.soinside.com 2019 - 2024. All rights reserved.