GCC 值得在 Windows 上使用来替代 MSVC 吗?

2024-03-03

我目前在 Windows 上使用 Visual Studio 2010 使用 C++ 进行开发。在 C++11 正式发布后,我开始使用 MSVC 中已经提供的一些功能。但是,正如预期的那样,绝大多数新更改都不受支持。

我想也许即将推出的 Visual Studio 版本会添加这些新功能。然而读完之后this http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx看起来几乎不会改变。

因此,我很好奇在 Windows 上使用 GCC 而不是 MSVC 的可行性,因为它似乎已经支持绝大多数 C++11。据我所知,这意味着使用 MinGW(我还没有见过任何其他本机 Windows 版本的 GCC)。但我对这是否值得尝试有疑问:

  • 它是否可以用作 cl.exe 的直接替代品,或者是否会涉及大量黑客行为和兼容性问题以使 Visual Studio 使用不同的编译器?
  • 在我看来,Visual Studio 的主要卖点是它的调试器。如果您使用不同的编译器,它仍然可用吗?
  • 由于 GCC 来自 *nix 世界,并且不是 Windows 原生的,因此与使用本机 MSVC 编译器相比,创建本机 Windows 应用程序是否存在代码质量问题? (如果重要的话:我的大多数项目都是游戏。)
  • 换句话说,我编译的 exe 的质量会因为使用非 Windows 原生编译器而受到影响吗?

MSVC 具有 Windows 下无与伦比的 IDE 的巨大优势,包括调试器支持。

MinGW 的最佳替代方案可能是 Code::Blocks,但两者之间存在着一些差距,特别是在代码完成和调试器方面。

此外,MSVC 还允许您使用 MinGW 不支持的一些专有的 Microsoft 内容(MFC、ATL 和可能的其他内容),并且使使用 GDI+ 和 DirectX 变得更容易、更直接(尽管可以使用 MinGW 来完成这两种操作)。

正如另一篇文章中提到的,Cygwin 将具有额外的依赖项和可能的许可证问题(依赖项是 GPL,因此您的程序也必须如此)。 MinGW 没有任何此类依赖性或问题。

MinGW 也编译显著地比 MSVC 慢(尽管预编译头有一点帮助)。

尽管如此,GCC/MinGW 是一个完全可靠的质量编译器,在我看来,它在生成代码的质量方面优于任何迄今为止可用的 MSVC 版本。
对于最新版本的 MSVC,这一点不太明显,但仍然可见。特别是对于与 SSE、内在函数和内联汇编相关的任何内容,GCC 从那时起就彻底消灭了 MSVC(尽管他们正在慢慢追赶)。

GCC 的标准合规性也好得多,这可能是一把双刃剑(因为这可能意味着您的某些代码无法在更符合标准的编译器上编译!),C++11 支持也是如此。

MinGW 还可以选择支持 DW2 异常,这些异常与“正常”风格完全不兼容,并且在可执行文件中占用更多空间,但积极的一面是运行时“几乎零成本”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCC 值得在 Windows 上使用来替代 MSVC 吗? 的相关文章

  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • C 编译器无法在 Mac OS Mountain Lion 上创建可执行文件

    我几乎浏览了每一页 但所有提示都不能解决问题 我正在运行 Mountain Lion 我有 Xcode 所有最新的开发工具 最新的 GCC 等等 我正在尝试设置 rbenv 和 ruby build 一切似乎都正常 但是当我去安装 ruby
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • Java - 创建一个具有指定长度并填充特定字符的新 String 实例。最好的解决方案? [复制]

    这个问题在这里已经有答案了 我确实检查了其他问题 这个问题的重点是以最有效的方式解决这个特定问题 有时您想要创建一个具有指定长度的新字符串 并使用默认字符填充整个字符串 也就是说 如果你能做到的话那就太酷了new String 10 并从那
  • Ftp 仅在 .NET 4.0 中抛出 WebException

    我有以下 C 代码 当针对 NET Framework 3 5 或 2 0 编译时 它运行得很好 我没有针对 3 0 进行测试 但它很可能也能工作 问题是 当针对 NET Framework 4 0 构建时它会失败 FtpWebReques
  • 负索引数组的实现

    我正在制作一个世界向各个方向无限延伸的游戏 这意味着您可以处于以下位置X 50 Y 50 or X 50 Y 50 但是 我真的无法用普通的 C 列表做到这一点 我想出的所有想法似乎都太复杂 效率低下 无法实现 实现无限网格的最简单方法是使
  • sql server 排序规则冲突

    当我发出 SQL 查询时 有时会收到以下错误消息 无法解决等于操作中 Latin1 General CI AS 和 SQL Latin1 General CP1 CI AS 之间的排序规则冲突 我经常解决这个问题只是使两个表排序规则相同 所
  • Windows 上 Ruby 中的 Unicode 文件名

    我有一段代码 如下所示 Dir new path each do entry puts entry end 当我列出的目录中有一个名为 世界 txt 的文件时 问题就出现了 在 Windows 7 机器上我得到输出 txt 通过谷歌搜索 在
  • R 错误:`n()` 只能在 dplyr 动词内部使用

    我收到错误的代码 numCrimesByLSOA lt crimes gt select LSOA code LSOA name Crime type gt group by LSOA code gt summarise Num crime
  • 问题:nginx:[emerg] mkdir()“/var/cache/nginx/client_temp”失败(13:权限被拒绝)

    我正在尝试跑步Nginx on Openshift但面临这个目录权限问题 由于此错误 容器未创建 以下权限设置为手动创建的文件 drwxr xr x 3 root root 79 Dec 22 02 50 etc nginx drwxr x
  • 车祸最低门槛

    我正在使用加速度计来检测车祸 我遇到了检测车祸所需的最小阈值的问题 检测车祸所需的最低阈值是多少 Override public void onSensorChanged SensorEvent event float x event va
  • 垂直或水平调整 div 大小

    如何在不使用 css 属性的情况下调整 div 垂直或水平大小 仅使用纯 javascript 代码从高度或宽度调整大小 HTML div div This is the top side s content div div div div
  • 如何强制 Git (2.5+) HTTP 传输更喜欢 SPNEGO 而不是基本身份验证?

    Summary 我正在使用 Git for Windows 2 5 1 通过 Kerbesized Git 服务器进行身份验证 当我使用表单中的 URL 时https el2 gitlab sa c kkm GrammarTools git
  • 导出到 Apps 脚本 web 应用程序的图表数据为空

    我有一个 Google 表格 我正在使用它作为我的团队正在开展的项目的数据库 我想做的是使用这些数据在 Google 网站上构建不同的屏幕 例如 我已经能够添加一个显示所有活动项目的下拉列表 选择项目后 将返回并显示 HTML 表格 现在
  • 如何在 VSC 中注释/取消注释 jsx(使用键盘 `cmd /`)?

    谁能告诉我如何在 VSC 中注释 JSX 代码 我看了下面列出的文章 似乎都没有给出具体的解决方案 而且票证似乎已经关闭 声称评论 取消评论功能已在VSC上得到妥善解决 但是 按照建议尝试以下方法后 我仍然遇到问题 在 VSC 上禁用 su
  • 二维数组的线性排序

    我是 C 编程新手 正在尝试编写一些排序程序 我编写了线性 正常排序的程序 现在我想做一个程序来对二维数组进行排序 即如果矩阵是 4 6 1 3 2 9 5 7 8 那么结果应该是 1 2 3 4 5 6 7 8 9 由于您希望 2D 数组
  • 控制 genoPlotRplot_gene_map 中的边距

    我正在制作一个plot gene map数字由genoPlotR R包 它给出了一个水平系统发育树 其中与每个叶子对齐的是一个基因组片段 这是一个简单的例子 说明了我的用法和问题 The plot gene map函数需要一个ade4的包p
  • 使用 django Rest 框架在验证步骤之前修改数据

    我有一个简单的Model存储创建它的用户ForeignKey 该模型有对应的ModelSerializer and ModelViewSet 问题是当用户提交一个POST要创造一个新记录 user应该由后端设置 我尝试覆盖perform c
  • 如何(可移植地)使用 C++ 类层次结构和动态链接库

    好吧 我知道可移植性不是 C 的强项 但我必须让我的代码在 Mac 和 Windows 上运行 我已经提出了一种解决方案 但它并不完美 我有兴趣看看是否有人可以提出更好的解决方案 我需要在多个 DLL 包中使用类层次结构 例如 我有一个抽象
  • iOS 6 视图加载期间的设备方向处理?

    我有一个标签栏应用程序 我使用的是 XCode 4 3 3 我已经升级到 4 5 2 带有 iOS6 的东西 我的代码在shouldAutorotateToInterfaceOrientation每个视图都会检查当前设备方向并正确放置所有
  • 如何在 XAML 中构建控件网格?

    我正在尝试按照规范在 WPF 中构建 UI UI 用于编辑项目集合 每个项目都有一个可编辑的字符串属性 以及 UI 需要显示的可变数量的只读字符串 它可能看起来像这样 或者 根据数据 可能有不同数量的文本标签列 文本列的数量是完全可变的 可
  • 由于通道 url 不兼容,设备未接收 C# Windows 推送通知

    经过几个小时的试用 我仍然无法向我的应用程序发送推送通知 这就是我到目前为止所做的 激活服务于https appdev microsoft com 得到了SID 我们调用它ms app s 1 23 4 12345678901 123456
  • GCC 值得在 Windows 上使用来替代 MSVC 吗?

    我目前在 Windows 上使用 Visual Studio 2010 使用 C 进行开发 在 C 11 正式发布后 我开始使用 MSVC 中已经提供的一些功能 但是 正如预期的那样 绝大多数新更改都不受支持 我想也许即将推出的 Visua