我正在启动一个宠物项目,旨在实现可移植性。这是一个简单的平台游戏,我计划使用不同的工具链将其编译到许多不同的平台上。视频/输入/系统的东西已经通过有多个视频驱动程序来抽象,我根据我的代码周围的 ifdef 包含这些驱动程序。每个平台makefile都有一个平台的定义(DC,NDS,PSP等),然后我包括适当的视频驱动程序,它们是C文件,具有围绕我的代码调用的各种功能。
但是,我不确定 C 中可移植应用程序的其他注意事项。 我应该重新定义 stdlib 中的东西吗? U8、U16、U32 和 S8、S16、S32 等?对于这个项目,你能和我分享什么知识?
可移植程序是具有以下特性的程序:
- 仅使用 C 标准中定义的语言和库的功能
- 不调用未定义的行为
- 不依赖于未指定或实现定义的行为。
、未指定和实现定义行为的列表,您可以转到 C 标准 C11 附录 J(可移植性问题)。
用 C 编写或多或少是可移植的,只要你不假设你的类型的大小和你用来访问它们的指针。我个人更喜欢使用 stdint.h
(http://pubs.opengroup.org/onlinepubs/7999959899/basedefs/stdint.h.html) 中定义的类型 - 这定义像 uint8_t
, uint16_t
... - 但请随意研究更多替代方案,例如 types.h
(来自 POSIX 标准:2.6 原始系统数据类型)将它们定义为u_int8_t
等......
可能,您最终会根据您设法从网络上找到的各种来源中拼凑在一起的内容来定义自己的类型......如:game_int_16
、game_int_32
...