首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写一个可移植的C程序--需要考虑哪些事情?

编写一个可移植的C程序--需要考虑哪些事情?
EN

Stack Overflow用户
提问于 2010-02-21 04:06:24
回答 7查看 10.1K关注 0票数 16

对于大学中的一个项目,我需要扩展现有的C应用程序,它最终将在各种商业和非商业unix系统(FreeBSD、Solaris、AIX等)上运行。

当我想要写一个可移植性最好的C程序时,我必须考虑哪些事情?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-21 04:14:03

我能给出的最好的建议是,每天移动到一个不同的平台,边走边测试。

这将使平台的差异像一个疼痛的拇指一样突出,同时也会教你可移植性问题。

把跨平台测试留到最后,会导致测试失败。

抛开这个不谈

differently.

  • integers endianism.

  • Compilation整数大小可能不同。
  • 浮点数可以表示为不同的

选项。

  • 包含的文件名可能不同。
  • 位字段的实现也会有所不同。

通常,将编译器的警告级别设置得尽可能高是个好主意,以查看编译器可能会抱怨的内容。

票数 24
EN

Stack Overflow用户

发布于 2010-02-21 04:51:43

我曾经写过C实用程序,然后我会在16位到64位的体系结构上支持它们,包括一些60位的机器。它们包括至少三种不同的“字节顺序”、不同的浮点格式、不同的字符编码和不同的操作系统(尽管Unix占主导地位)。

  1. 尽可能接近标准C。对于不属于该标准的函数/库,请尽可能使用广泛支持的代码库。例如,对于网络,使用BSD套接字接口,使用零或最少使用低级套接字选项、带外信令等。要以最少的人员支持大量不同的平台,您将不得不使用普通的普通函数。
  2. 非常了解标准所保证的内容,以及典型的实现行为。例如,指针不必与整数大小相同,并且指向不同数据类型的指针可以具有不同的长度。如果您必须进行依赖于实现的假设,请详细记录它们。在这里,Lint、--strict或您的开发工具集拥有的任何等效工具都是至关重要的,
  3. 头文件是您的好朋友。使用实现定义的宏和常量。使用头文件定义和#ifdef来帮助隔离那些需要覆盖少量alternatives.
  4. Don't的实例。有相当数量的ASCII -2的补充机也在那里。:-)

有了这些,如果你避免多次编写代码和#ifdef主要代码部分的诱惑,你会发现跨不同平台的编码和测试有助于更快地发现bug。您将最终生成更有纪律的、可理解的、可维护的程序。

票数 8
EN

Stack Overflow用户

发布于 2010-02-21 04:15:19

  1. 至少使用两个适当的持续构建系统,最好是构建在各种目标平台上。
  2. 如果您不需要非常底层的工作,请尝试使用一些提供抽象的库。您不太可能找不到为您需要的东西提供良好抽象的第三方库。例如,对于网络和通信,有ACE。Boost (例如文件系统)也可以移植到多个平台上。这些都是C++库,但也可能有其他的C库(如curl)。
  3. 如果您必须在低级工作,请注意,即使在posix这样的平台上,平台有时也会有不同的行为,因为它们应该具有相同的行为。你可以看看上面这些库的源代码。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2303516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档