【发布时间】:2015-09-20 20:47:52
【问题描述】:
假设您有一段代码必须根据程序运行的操作系统而有所不同。
这是老派的做法:
#ifdef WIN32
// code for Windows systems
#else
// code for other systems
#endif
但必须有比这个更清洁的解决方案,对吧?
【问题讨论】:
-
我讨厌条件编译。恨恨恨。我更喜欢通用头文件和单独的实现文件。更干净,更容易理解,并且通常最少的代码重复。例如,oswrapper.h、oscommon.cpp、osposix.cpp、oswindows.cpp 并找出 osposix 和 oswindows 中的哪一个在 makefile 或 IDE 的 target/profile/whatever 中构建和链接。
-
我必须支持上述帖子。我很少会使用
ifdef指令,那就是如果许多操作系统中的一个有一个特殊的怪癖,任何查看代码和阅读简短评论的人都可以快速理解和修复。在这些情况下,将所有内容分成多个文件的认知开销远远大于ifdef和评论。 -
@BaummitAugen 手头有硬件支持、驱动程序等的此类库吗?这不是一个很有帮助的一般性陈述。
-
@Dogbert 如果该评论应该是答案,我会将其发布为答案。但事实并非如此,使用现有代码而不是例如使用现有代码是一个简单的建议。在 Windows 上编写另一个与
__int64混淆的标头。 -
@BaummitAugen 够公平的。