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

时间:2016-09-25 11:22:26

标签: c++ linux windows

直到现在,我已经使用代码块在Windows和Linux Based系统中成功编译了相同的代码!直到现在都没有错误,但我只是c ++初学者而且我的程序很简单所以我无法理解它!所以我想也许我可以把它从你那里清除,伙计们!

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

如果你的答案是:是的,那么

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

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

  • 为什么呢?什么代码在Windows中工作而不在Linux中,反之亦然?

  • 是否有任何c ++代码可以查找它是否在基于Windows的运行中运行 系统或基于Linux的系统?

  • 所有c ++代码(完全相同)是否都可以编译和工作 MAC系统以及基于Linux的系统?

感谢您阅读

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

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

如果你使用C++14C++14的功能 - 在操作系统A上支持编译器,但操作系统B上的编译器不支持它,它只是赢了'编译。

  

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

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

  

为什么呢?什么代码在Windows中工作而不在Linux中,反之亦然?

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

请参阅this

  

是否有任何c ++代码可以查找它是否在基于Windows的运行中运行   系统还是基于Linux的系统?

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

  

所有c ++代码(完全相同)是否都会编译和工作   MAC系统以及基于Linux的系统?

不,绝对不是全部,上面给出的理由。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

答案:这取决于!

如果您的代码包含对系统文件的引用(例如:windows dlls),那么它将无法在其他系统上编译(例如:linux系统)。如果您的代码没有引用系统文件,那么它将在任何系统上编译。