【问题标题】:Does all c++ code(exactly the same) will compile and work the same on Windows system as well as Linux Based system? and Why?[in c++] [RBIx] [closed]是否所有 c++ 代码(完全相同)在 Windows 系统和基于 Linux 的系统上都可以编译和工作?为什么?[在 c++ 中] [RBIx] [关闭]
【发布时间】:2017-02-02 19:38:08
【问题描述】:

到目前为止,我已经使用代码块成功地在 Windows 和基于 Linux 的系统中编译了相同的代码!到目前为止还没有出错,但我只是 c++ 初学者,我的程序很简单,所以我无法理解!所以我想也许我可以从你们那里清除它!

是否所有的 c++ 代码(完全相同)在 Windows 系统和基于 Linux 的系统上都可以同样编译和工作?为什么?

如果你的答案是:是的,他们会这样做

  • 为什么相同的 c++ 程序有不同的版本(Windows 版本和 Linux 版本)?

如果你的答案是:不,他们不会

  • 为什么?以及哪些代码在 Windows 中有效,在 Linux 中无效,反之亦然?

  • 是否有任何 c++ 代码来查找它是否在基于 windows 的环境中运行 系统还是基于 Linux 的系统?

  • 是否所有 c++ 代码(完全相同)都将编译和工作相同 MAC系统和Linux系统一样吗?

感谢阅读

【问题讨论】:

  • 很抱歉在我的帖子中提出了一些额外的问题!我认为他们太小太傻了,不能为他们单独发帖!
  • 你不必加粗所有问题...你知道我们的视力还是不错的
  • 好的,编辑完成了!我已经改了!
  • 这些 Ctrl-M 字符是什么?
  • 让我想起了 geocities 网站。唯一缺少的是彩色文字。粗体、斜体、不同的字体大小和各种可能的格式混合在一起。

标签: c++ linux windows


【解决方案1】:

如果你想让 C++ 代码在两个不同的操作系统上编译,必须满足许多要求:

  • 您的代码是否使用特定于操作系统的库?这样的代码不会在不同的平台上编译。
  • 您的编译器是否在 OS A 上提供适当的扩展以支持 OS B 库?

最好的方法是避免这两种情况。另一个问题是:

  • OS A 上的编译器是否使用与 OS B 上的编译器相同的 C++ 标准版本?

如果您使用来自C++14 的功能和C++14-支持操作系统A 上的编译器,但操作系统B 上的编译器不支持它,它根本不会编译。

为什么相同的 c++ 程序有不同的版本(Windows 版本和 Linux 版)?

因为没有一些额外的库或编译器扩展,C++ 标准不提供有关操作系统的信息。您在代码中使用的字符串解析也可能存在一些差异,例如在打开文件或写入文件时。

为什么?哪些代码在 Windows 中有效,在 Linux 中无效,反之亦然?

为什么会这样,见上文。只有使用完全相同的 C++ 标准而没有任何操作系统特定方面的代码才能编译不同的操作系统。您可以使用条件编译的代码来解决这个问题,

this

是否有任何 c++ 代码来查找它是否在基于 windows 的环境中运行 系统还是基于 Linux 的系统?

编译器应该提供预定义的宏来检查目标操作系统(见上面的链接)

是否所有 c++ 代码(完全相同)都可以编译和工作 MAC系统和Linux系统一样吗?

不,绝对不是全部,上面给出的原因。

【讨论】:

  • 最后,一个完美而清晰的答案,可以回答所有问题!这就是我想要的!非常感谢!
  • <windows.h> 是头文件,而不是库。并且其中没有任何内容会禁止在任意平台上进行编译。根据引用的内容,它甚至可能不会禁止在非 Windows 平台上运行最终的可执行文件。 “编译器应该提供预定义的宏,这样你就可以检查你正在运行的操作系统。” - 不,他们没有。它们通常提供可用于检查目标平台的宏。总之,这个答案甚至不是大致正确的。您可能希望改进它,因为它是公认的答案。
  • @IInspectable 感谢您的指出。已编辑。
【解决方案2】:

已经有了一些答案,但是比系统库有更细微的差异。我想到的第一个是行尾。 Windows uses \r\n while linux uses just \n。如果你使用例如std::endl 你会得到正确的行尾。但是,一旦您想在 linux 中读取在 windows 中编写的文件,反之亦然,这可能是一个问题。同样,windows 使用\ 作为文件夹的分隔符,而 linux 使用/

我并不是说在将代码从 linux 移植到 Windows 时,这将是主要障碍,反之亦然。关键是:代码可以编译,甚至可以在没有错误的情况下运行,但是当它在 linux 上测试但在 windows 上运行时,它可能无法按预期工作(反之亦然)。好消息是 C++ 为您提供了编写原则上应该能够在 windows 和 linux 上运行的代码所需的一切。

【讨论】:

  • 明白了!谢谢 !顺便说一句,是否有任何 c++ 代码可以查找它是在基于 Windows 的系统还是基于 Linux 的系统中运行?
  • @Aravind.KEN:为什么会有?如果目标平台很重要,您在编译时就已经知道了。此信息通常可通过预定义的预处理器宏获得。关于行尾差异的观点实际上也与跨平台代码无关。每当 data 进入或离开您的应用程序时,无论是文件流还是网络套接字,您都必须处理它。你必须知道协议才能消化它。
【解决方案3】:

不一定。它们是两个不同的操作系统,因此它们都具有可以使用的系统特定库。如果您的代码是一个简单的代码,其中包含同时存在于 linux 和 Windows 中的库,那么很好,该代码将在两个系统上运行。
另一方面,例如,如果您的代码包含与操作系统本身一起使用的库,则库所做的系统调用是不同的。 Windows 使用 Windows API,在 Linux 系统上运行时将无法使用。

【讨论】:

  • 好吧,明白了!是否有任何 c++ 代码可以查找它是在基于 Windows 的系统还是基于 Linux 的系统中运行?
【解决方案4】:

答案:视情况而定!

如果您的代码包含对系统文件的引用(例如:windows dll),那么它将不会在不同的系统(例如:linux 系统)上编译。如果您的代码不引用系统文件,那么它将在任何系统上编译。

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多