【问题标题】:Programming for Operating Systems [closed]操作系统编程[关闭]
【发布时间】:2011-10-31 23:53:44
【问题描述】:

首先:我完全是 C/C++ 初学者(虽然我有 PHP/Javascript 方面的经验)。我有几个关于语言和操作系统的问题。

C/C++ 是一种独立于操作系统的语言吗?例如,我用 C/C++ 编写的所有程序在所有操作系统中运行时都可以工作吗?

我需要一个特定于操作系统的编译器来让我的程序在上面运行吗?

在为不同的操作系统编写程序时,我需要解决哪些具体问题? (任何语法变化,或必须有特定的软件等)

将来我想创建自己的某种视频游戏,在阅读时,我注意到 DirectX 适用于 Windows,而 OpenGL 是多平台的。那么假设某些库依赖于操作系统是否正确?我在某处读到操作系统监控对某些地方的访问以提高安全性,从而防止直接访问视频卡。

为特定操作系统编码是否值得我花时间?或者是否有一点我应该对自己说,添加额外的代码会使我的程序变得复杂/混乱/阻碍我的程序进度并维护它以备将来使用?

最后,我应该如何设计我的程序以使用多个操作系统?我认为将特定于操作系统的代码尽可能分开是理想的。对于很多程序,我会看到基于您的操作系统的单独下载链接。所以我很好奇他们是如何管理(以供将来更新)每个代码的。

【问题讨论】:

  • 第一件事:没有称为“C/C++”的语言。 C 和 C++ 在几乎所有方面都是根本不同的语言。那么您问的是哪种语言?

标签: c++ c operating-system cross-platform


【解决方案1】:

我的回答主要是关于 C 的,但 C++ 的可移植性应该是类似的。

C/C++ 是一种独立于操作系统的语言吗?

是的,语言本身(如 ISO 标准中所述)是独立于系统且可移植的。只有当你按照标准编写程序并且不使用任何外部函数时才这样(标准有一个函数列表,每个编译环境都必须实现)

如,我用 C/C++ 编写的所有程序在所有操作系统中运行时都能正常工作吗?

没有。您可以编写不可移植的代码(例如,在标准中声明为未定义行为)。您还可以使用特定于操作系统的函数,例如CreateProcessmmap,这将限制您的程序可移植性。

我需要一个特定于操作系统的编译器来让我的程序在上面运行吗?

您需要一个针对您的操作系统的编译器。您还需要一个标准的 C 库(例如 BSD libc、GNU glibc、Android boinic 等)来实现标准的功能。

在为不同的操作系统编写程序时,我需要解决哪些具体问题? (任何语法变化,或必须有特定的软件等)

你应该以可移植的方式,以良好的风格编写程序。有很多艰难的时刻,例如您不能假设 int 是 4 字节长,或者 void* 可以转换为 int。您不需要任何额外的软件。

如果你想使用任何外部库,你应该知道,该库是否可移植。

那么假设某些库依赖于操作系统是否正确?

有点。一些库被移植到许多操作系统。可移植性有一些限制。

【讨论】:

    【解决方案2】:

    C/C++ 是独立于操作系统的语言。当然,您需要针对要运行的体系结构和操作系统的编译器;为 Windows 编译的程序不会在 Linux 上运行,反之亦然。 (可以说)最好的编译器是 GCC,它也可用于 Windows(参见 MinGW),并且默认包含在大多数 linux 发行版中(尽管您可能必须在某些发行版上单独安装它)。

    关于库,是的,有些库仅在 Windows 上运行。在 Visual Studio 中用 C++ 编写并使用其专有类的程序将无法在 Linux 上运行/编译。如果您想为游戏提供多平台支持,请使用 OpenGL 而不是 DirectX,它会让您的生活更轻松。

    我会将程序分成多个分支,一个用于 Windows,一个用于 Linux,一个用于 Mac OS,因为所有这些都有不同的 GUI 设计方法(除非您决定使用跨平台工具包,例如作为Qt)。

    希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

      C/C++ 是独立于操作系统的语言吗?

      是的。

      如,我用 C/C++ 编写的所有程序在所有操作系统中运行时都能正常工作吗?

      如果您的操作系统有编译器/链接器,并且您只使用纯 c 或 c++ - 是的。但请注意,有许多依赖于操作系统的库(包括来自操作系统本身的 API)当然不可能在其他操作系统中使用。存在许多库来隐藏操作系统差异,例如提升。

      我需要一个特定于操作系统的编译器来让我的程序在上面运行吗?

      是的。

      那么假设某些库依赖于操作系统是否正确?

      是的,见上文。

      在为不同的操作系统编写程序时,我需要解决哪些具体问题? (任何语法变化,或必须有特定的软件等)

      语法相同。请牢记操作系统 API 或特定库。

      【讨论】:

      • 你的意思是“是的他们是”? ;)
      猜你喜欢
      • 2011-08-26
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2013-08-29
      • 2011-11-19
      • 2011-06-23
      相关资源
      最近更新 更多