1

我正在阅读的一本书建议在它们打算用于的机器上编译程序以确保没有任何问题。我想学习 C 的一大原因是因为它(可以)与所有操作系统兼容。我在linux上使用这个。如果在预期的机器上编译程序不是一种选择,是否有一个可以遵循的程序来确保程序能够完美运行,而不管它运行在哪个版本的 linux/bsd 上?就像一张针对不同操作系统和不同架构的兼容功能的婴儿床,如何处理每个差异以确保兼容性?

4

4 回答 4

2

使用旨在跨平台工作的库。如果您确实需要做任何与平台相关的事情,则必须编写代码来说明您希望应用程序在其上运行的所有架构/平台。

特定平台必须#define X确定代码是否在其上运行,因此您可以#ifdef X检查特定平台,然后在该语句中编写代码,对平台特定代码的每一位执行相同操作。

于 2013-03-08T13:10:39.953 回答
1

您对源代码兼容性和二进制兼容性感到困惑。二进制文件绝对不可移植,这与编程语言无关。例如,在 BSD 上编译的二进制文件永远不会在 linux 上运行,因为所有系统调用都有不同的编号和约定。

如果仔细编写,C 代码应该是可移植的并且与各种操作系统兼容。您只需在每个目标平台上单独编译它。

于 2013-03-08T13:26:23.210 回答
0

我会查阅以下几个链接以获取一些基本信息

http://en.wikipedia.org/wiki/Linux_Standard_Base

http://www.linuxfoundation.org/collaborate/workgroups/lsb

于 2013-03-08T13:15:26.210 回答
0

标准 C 是可移植的,但与所有语言一样,内存管理之外的任何内容和语言竭尽全力包含的非常基本的库都将不可移植。

这个问题即使在 Java 中也存在,因为假设您想做一些看似可移植的事情(比如将控制台窗口的颜色设置为绿色或红色)是不可能的。

总体而言,示例书 C 往往是非常便携的,或者具有非常小的修复(例如进行显式转换)的便携性。

于 2013-03-08T13:15:37.783 回答