2016-04-05 45 views
3

我有一个项目,我想在Ubuntu和Windows机器上编码。在Ubuntu上我使用gcc,而在Windows上我想使用MSVC。C++与2个编译器

用2种不同的编译器编译相同的代码是不是一个好主意?或者我会遇到问题?

谢谢。

+2

是的,编译与两个独立的编译器是健康的。确保清除它们可能发出的警告消息(不是禁用它们,最好是理解并修复它们)。根据我的经验,两面编译的代码也可以运行双方。 –

+0

你很可能会遇到问题,但这不应该阻止你。您可能需要使用一些依赖于平台的代码,这些代码通常由“platform.h”类文件处理。该文件基于编译器和平台进行适当的定义,因此您不要使用特定于平台的定义混淆您的代码库。 – Alex

+1

@TomášZato:是什么让你觉得程序员的问题没有问题要解决? –

回答

15

这是一个好主意。在过去,我在代码中发现了一些错误,我只能在切换编译器后才看到这些错误。

+0

哦,我从来没有想过,他们会发现不同的错误,这是一个伟大的点!是否曾经有一段时间你无法在一个编译器上编译代码,仅仅是因为它们工作方式的差异? 我在某处读到msvc与gcc有点不同,gcc更贴近C++标准。 – ipe369

+1

是的。即使是相同的编译器,但版本不同。 gcc的每个后续版本都倾向于不太容忍小规则违反C++规则的情况,早期版本的gcc往往忽略。 –

+1

您可以随时重写代码,以便在两个平台上编译(所需的更改通常很明显)。有些可怕的案例是他们都编译的,但只有一个可行;在两个平台上进行测试! (当你意外地引入了未定义的行为时,通常会发生这种情况,但是一个平台会执行您期望的操作。) –

7

如果你想为不同的平台编译,你的用不同的编译器编译(即使它们是同一个编译器的不同版本)。

如果使用GCC和MSVC进行编译,您会发现不能使用每个编译器提供的很多扩展。你也会发现像MSVC这样的烦恼在_open等函数的前面加下划线。基本上,这归结为“欢迎到便携式编码的美妙世界”。另一方面,一旦开始为两个编译器编写代码,添加第三个编译器变得更容易 - 我建议将Clang添加到组合中,作为便宜且令人愉快的静态分析工具。

+0

不要给gcc人员任何明智的想法。就像将一个win32目标添加到Linux版本一样。 –

+0

什么?你的意思是像Mingw? –

+0

不是本地Windows端口吗?我指的是在Linux版本中添加一个win32交叉编译目标。这将使技术上可以使用相同的编译器来构建ELF和win32二进制文件。 –