【问题标题】:Programming in C - Differences between Linux and OSX用 C 语言编程 - Linux 和 OSX 之间的差异
【发布时间】:2013-10-25 03:21:34
【问题描述】:

您好,我正在研究 C 编程。

我想知道 C 语言中的 Linux 和 OSX 之间是否存在差异?我知道 Windows 和 Linux/Unix 之间有一些(比如获取系统时间戳)。是否有任何特定的命令或技术不适用于两者之一? “基本”程序应该在两者上运行吗?

我知道 C 不是交叉编译语言,但 OSX 和 Linux 都是 Unix - 不是吗?

【问题讨论】:

  • o.O ... O_O ... :o -- “我知道 C 不是跨平台语言”——那么你就知道一些完全错误的事情。 C 是一种跨平台语言。
  • 也许我应该补充的不是像 Java 这样的跨平台语言。交叉编译语言是不是更好的表达方式

标签: c linux macos unix cross-platform


【解决方案1】:

Linux 在 Linux 和 Darwin 都遵循的基本 POSIX 标准上包含很多扩展(Linux 是“标准”,因为它与 Linux 完全一样)。正如 Stefano 所指出的,在许多情况下这很好,但是如果您有一个为 Linux 编写的程序而不关心可移植性(“在 Ubuntu 和 SuSE 上运行”不是“可移植性”),您应该会看到一些不同的行为并且缺少扩展名。例如,mremap()pipe2() 是特定于 Linux 的函数。 SOCK_NONBLOCKsocket() 的特定于 Linux 的标志,等等。手册页通常会在“符合”部分中指出特定于 Linux 的内容。

【讨论】:

    【解决方案2】:

    改变的不是语言本身,而是库(和相关的 API 调用)。 Mac OSX 和 Linux 在这方面没有区别,只要你坚持使用标准的 POSIX 调用。 Linux 和 Mac OSX 都是 POSIX 兼容的系统。

    当然,当谈到专有的 Apple 库时,您不能指望在 Linux 下找到它们。但这是另一个问题。 Linux 内部也是如此。

    请注意,我们谈论的是source 兼容性,而不是二进制 兼容性。您根本不必修改源代码,但您必须为每个平台分别编译它。

    【讨论】:

    • 是的,没错,而且也不能在 OS X 上使用 Linux API。但标准 C 是“标准”是有原因的。
    猜你喜欢
    • 2019-01-20
    • 2021-01-15
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2020-07-30
    • 2010-10-15
    • 2016-05-10
    • 2018-06-04
    相关资源
    最近更新 更多