假设您的一段代码必须根据程序运行的操作系统而有所不同。
有一种老式的方法:
#ifdef WIN32
// code for Windows systems
#else
// code for other systems
#endif
但一定有比这个更清洁的解决方案,对吗?
在我的职业生涯中,我在六家公司亲眼见过的典型方法是使用硬件抽象层 (HAL)。
这个想法是,您将最低级别的内容放入专用标头和静态链接库中,其中包括以下内容:
- 固定宽度整数 (
int64_t
在Linux上,__int64
在 Windows 等上)。
- 常用库函数(
strtok_r()
vs strtok_s()
Linux 与 Windows 上)。
- 通用数据类型设置(即:所有数据类型的 typedef,例如
xInt
, xFloat
等等,在整个代码中使用,这样如果平台的底层类型发生变化,或者突然支持新平台,则无需重新编写和重新测试依赖于它的代码,这在劳动力方面可能非常昂贵)。
HAL 本身通常充满了预处理器指令,就像您的示例中一样,这就是问题的现实。如果你用运行时包装它if
/else
语句,您的编译将由于未解析的符号而失败。或者更糟糕的是,您可能包含额外的符号,这会增加输出的大小,并且如果频繁执行该代码,则可能会减慢程序的速度。
只要 HAL 编写得好,HAL 的标头和库就会为您提供一个通用接口和一组数据类型,以便您在代码的其余部分中轻松使用。
从专业的角度来看,这最美妙的一点是all您的其他代码不必关心架构或操作系统的细节。您将在不同的系统上拥有相同的代码流,这将允许您以各种不同的方式测试相同的代码,并找到您通常不会期望或测试的错误。从公司的角度来看,这在劳动力方面节省了大量资金,并且不会因为客户对生产软件中的错误感到愤怒而失去客户。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)