编写便携式C时要考虑什么?

时间:2014-02-10 13:03:18

标签: c portability

我正在开始一个旨在实现便携性的宠物项目。这是一个简单的平台游戏,我打算将其编译到具有不同工具链的许多不同平台。视频/输入/系统内容已经通过拥有多个视频驱动程序进行了抽象,我根据ifdef在我的代码周围添加了这些驱动程序。每个平台makefile都有一个平台的定义(DC,NDS,PSP等),然后我包含了正确的视频驱动程序,这些驱动程序是带有各种功能的C文件。

但是,我不确定C中其他便携式应用程序的注意事项。我应该从stdlib重新定义东西吗? u8,u16,u32和s8,s16,s32等?您可以在此项目中与我分享哪些知识?

2 个答案:

答案 0 :(得分:3)

便携式程序是一个程序:

  • 仅使用C标准中定义的语言和库的功能
  • 不会调用未定义的行为
  • 不依赖于未指定或实现定义的行为。

有关未定义,未指定和实现定义的行为的列表,您可以使用C标准C11,附录J(可移植性问题)。

答案 1 :(得分:1)

只要不对类型的大小和用于访问它们的指针做出任何假设,用C语言编写或多或少都是可移植的。我个人更喜欢使用stdint.hhttp://pubs.opengroup.org/onlinepubs/7999959899/basedefs/stdint.h.html)中定义的类型 - 这定义为uint8_tuint16_t ... - 但可以随意研究更多替代方案,例如{ {1}}(来自POSIX标准:2.6原始系统数据类型),将它们定义为types.h等......

可能,您最终会根据您在网络上找到的各种来源设置的内容来定义您自己的类型,例如:u_int8_tgame_int_16。 ..