C++ - 在 Windows 上使用 GCC 而不是 MSVC 值得吗? [关闭]

Posted

技术标签:

【中文标题】C++ - 在 Windows 上使用 GCC 而不是 MSVC 值得吗? [关闭]【英文标题】:C++ - Is it worth using GCC over MSVC on Windows? [closed] 【发布时间】:2015-07-21 02:19:43 【问题描述】:

我已经阅读了一些关于 GCC 与 MSVC 以及这些编译器开发的问题,例如 GCC worth using on Windows to replace MSVC?、Visual Studio or GCC? 和 GCC vs MS C++ compiler for maintaining API backwards binary compatibility。但这些都是非常过时的问题(2011 年)。随着新的 c++14 功能的出现,两个编译器之间开始平衡。在 Windows 上使用 Code::Blocks 是否仍然值得使用 Microsoft Visual Studio 的所有优点,例如:

原生 Windows 库,支持使用 MFC、ATL、DirectX 和其他有用的 Microsoft 库。 很棒的调试功能,尤其是在使用反汇编视图时(它有很多有用的功能)。

在我阅读的大多数主题中,他们总是说 GCC 代码生成优于 MSVC,但在这方面的差异开始缩小。 在 GCC 中代码生成是否仍然更好?最新的 c++ 功能呢,哪些是领先的?

我看到使用 GCC 与 MSVC 相比的最大优势是:

它是开源的,这使得自定义编译器代码成为可能。 更容易制作可移植的代码。 它是免费的。 ???更好的代码生成???

GCC 上的 C++14 功能:https://gcc.gnu.org/projects/cxx1y.html

MSVC RTM 上的 C++11 和 C++14 功能:http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx

【问题讨论】:

MFC 很烂,ATL 是恐龙。在我看来,MS 编译器仍然远远落后,尽管他们已经宣布即将推出的 VS 版本将支持 clang++。 我相信这将在任何时候关闭,因为基于意见,虽然我个人希望看到使用这两种工具并比较的人的各种意见 MinGW 也支持 DirectX 和其他有用的 Microsoft 库。请对此类基于意见的问题进行足够的研究并自己打电话;一个更客观的问题也许会更好地造福于社区。此外,大多数这些事情都取决于您的想法。你不需要所有的 MFC、ATL、DirectX,只需要一些子集/组合,这表明这只是一个展示实力的问题。 IMO,g++ 最大的问题是它依赖于 glibc,而 glibc 开发人员对 Windows 不屑一顾。这就是为什么要花费数年时间来修复std::to_string 之类的问题。您仍然必须使用 hack 才能使用 std::thread 和相关的。所以库的一致性是一个持续存在的问题。 gcc 比 MSVC 有更好的 C 支持。如果使用 C 库,这可能很重要。事实上,直到最近你才能用 MSVC 编译 ffmpeg。现在你可以,但仍有其他项目使用 MSVC 不具备的 C 功能(也不打算很快拥有)。虽然这是关于 C++ 的,但在较大的 C++ 项目中使用 C 项目并不少见,所以我认为值得一提。 【参考方案1】:

是的。

尽管 MSVC 在更新的 C++ 标准方面取得了一些进展,但它仍然可悲落后,即使处于 C++98 状态(方便地从该状态页面中排除) )。

根据我最近阅读的内容,MSVC 团队甚至没有解决一些旧问题的具体计划,例如具有名称查找和模板实例化。

现在,当您可以使用带有 clang 作为编译器的 MSVC 时,这可能是停止使用 GCC 的原因。但是,就我的目的而言,我发现 clang 的诊断能力较差(有时代码也较差),所以我仍然使用 GCC 作为我的主要编译器,并且只使用 clang 作为备份。

正如@Cheersandhth 所说,最好使用两个编译器。虽然也许看看英特尔的编译器。

【讨论】:

那么,GCC 中的代码生成是否更好? @user2565020:可以。对于我的光线追踪器,GCC 绝对比 clang 和 MSVC 好(GCC 代码快 10% 左右)。但其他程序可能更喜欢 clang(或 MSVC)的优化器和代码生成器。 你说“有些进步”是指哪个版本的VS? @clocktown 你应该看看MSYS2(不是MSYS)。 @VasanthaGaneshK 自从这篇文章以来,MSVC 取得了一些令人印象深刻的进步。请注意,我没有亲身经历。我还是更喜欢 GCC 的生态系统(便携、扩展、插件 API)。【参考方案2】:

详细的问题是公开征求意见;甚至还有一些关于“最佳 IDE”等的挑衅。即便如此标题中提出的问题,

C++ - 是 GCC [即g++] 现在值得在 Windows 上使用吗?

有一个简单的基于事实的答案,即,因为

在可能的情况下,将代码公开给至少两个编译器是个好主意,例如Visual C++ 和 g++ 的组合,以及

g++ 适合学习。

g++ 在 Windows 中的主要问题是它的 API 绑定只完全覆盖了 Windows XP API,而之后什么都没有

【讨论】:

关于最后一句话,你实际上可以使用GetProcAddress调用较新的函数来查看它们是否存在。不过这有点痛苦。 @MattMcNabb:是的,还有更多方法。创建 API 绑定没有挑战性。但工作量很大。 支持“向至少两个编译器公开代码”。 我确信补丁是受欢迎的。 TDM-GCC x64 构建从 4.7 版开始附带 DirectX 10/11 标头和库(请参阅 here),因此涵盖了 Windows XP API,之后就没有了。 不正确。

以上是关于C++ - 在 Windows 上使用 GCC 而不是 MSVC 值得吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我能够在 Windows(Visual C++)中读取 bin 文件,但不能在 linux(GCC)上读取 [关闭]

C++ 指针使用 Visual Studio 更改地址,而不是使用 OsX 中的 Xcode 或 Linux 中的 gcc

在 gcc 和 Visual C++ 中使用“>>”

C++ 在 GCC 上使用已删除的函数,但在 MSVC 上没有

ZeroMQ 编译在 Windows 上使用 gcc/g++ 失败

使用 gcc c++ 获取 Windows 版本