我有一个项目,我想在Ubuntu和Windows机器上编码。在Ubuntu上我使用gcc,而在Windows上我想使用MSVC。C++与2个编译器
用2种不同的编译器编译相同的代码是不是一个好主意?或者我会遇到问题?
谢谢。
我有一个项目,我想在Ubuntu和Windows机器上编码。在Ubuntu上我使用gcc,而在Windows上我想使用MSVC。C++与2个编译器
用2种不同的编译器编译相同的代码是不是一个好主意?或者我会遇到问题?
谢谢。
这是一个好主意。在过去,我在代码中发现了一些错误,我只能在切换编译器后才看到这些错误。
哦,我从来没有想过,他们会发现不同的错误,这是一个伟大的点!是否曾经有一段时间你无法在一个编译器上编译代码,仅仅是因为它们工作方式的差异? 我在某处读到msvc与gcc有点不同,gcc更贴近C++标准。 – ipe369
是的。即使是相同的编译器,但版本不同。 gcc的每个后续版本都倾向于不太容忍小规则违反C++规则的情况,早期版本的gcc往往忽略。 –
您可以随时重写代码,以便在两个平台上编译(所需的更改通常很明显)。有些可怕的案例是他们都编译的,但只有一个可行;在两个平台上进行测试! (当你意外地引入了未定义的行为时,通常会发生这种情况,但是一个平台会执行您期望的操作。) –
如果你想为不同的平台编译,你的有用不同的编译器编译(即使它们是同一个编译器的不同版本)。
如果使用GCC和MSVC进行编译,您会发现不能使用每个编译器提供的很多扩展。你也会发现像MSVC这样的烦恼在_open
等函数的前面加下划线。基本上,这归结为“欢迎到便携式编码的美妙世界”。另一方面,一旦开始为两个编译器编写代码,添加第三个编译器变得更容易 - 我建议将Clang添加到组合中,作为便宜且令人愉快的静态分析工具。
不要给gcc人员任何明智的想法。就像将一个win32目标添加到Linux版本一样。 –
什么?你的意思是像Mingw? –
不是本地Windows端口吗?我指的是在Linux版本中添加一个win32交叉编译目标。这将使技术上可以使用相同的编译器来构建ELF和win32二进制文件。 –
通过允许您直接从Linux上的Visual Studio编译代码,Microsoft可以轻松实现。它太酷了。
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/
是的,编译与两个独立的编译器是健康的。确保清除它们可能发出的警告消息(不是禁用它们,最好是理解并修复它们)。根据我的经验,两面编译的代码也可以运行双方。 –
你很可能会遇到问题,但这不应该阻止你。您可能需要使用一些依赖于平台的代码,这些代码通常由“platform.h”类文件处理。该文件基于编译器和平台进行适当的定义,因此您不要使用特定于平台的定义混淆您的代码库。 – Alex
@TomášZato:是什么让你觉得程序员的问题没有问题要解决? –