【问题标题】:How do I determine which C/C++ compiler to use?如何确定使用哪个 C/C++ 编译器?
【发布时间】:2011-02-17 20:50:24
【问题描述】:

我正在尝试找出要使用的 C/C++ 编译器。我在 Wikipedia 上找到了这个 C/C++ 编译器列表:

http://en.wikipedia.org/wiki/List_of_compilers#C.2FC.2B.2B_compilers

我相当肯定我想使用开源编译器。我觉得如果它是开源的,那么它将是一个更完整的编译器,因为许多程序员的观点都被用来使它变得更好。如果您不同意,请告诉我。

我应该提一下,我计划学习 C/C++,主要是为了编写与 Windows、Linux、MAC 和 iPhone 操作系统兼容的 2D/3D 游戏应用程序。我目前使用的是 Windows Vista x64 操作系统。

【问题讨论】:

  • iPhone --> gcc 和 llvm 是唯一的选择。
  • 如果您计划在 Apple 应用商店中发布 iPhone 应用,XCode 和 Objective-C 是唯一受支持的替代方案。
  • 我不知道你可以用 C++ 在非越狱手机上合法地开发 iPhone 应用程序。我的印象是需要 Objective-C。
  • C、C++ 和 Obj-C 都是允许的。
  • 此时的一个重要问题是,您究竟打算如何编写可在 Windows/Linux/Mac/iPhone 之间移植的 2D/3D 游戏?我对其中的“iPhone”部分特别感兴趣。

标签: c++ c compiler-construction windows-vista operating-system


【解决方案1】:

首先,恕我直言,作为初学者,您的开发环境 (IDE) 比编译器重要得多。

我认为人们在早期就过分强调编译器的选择。虽然它不是 Java,但 C++ 是可移植的。

如果您正在编写的程序仅适用于特定的编译器,那么您可能做错了事,或者可以稍微提高可移植性。

如果您选择编译器会对您的性能产​​生重大影响,那么您已经完善了程序中的其他所有内容,并且您处于良好状态,并且您的能力也相当先进。我们曾经在 CS 课程的相当高级阶段教授编译器之间的差异。

如果您使用基于 UNIX 的机器(Linux、Mac、实际的 Linux),那么 GNU (g++) 几乎是可行的,并且是相当标准的。如果它足以编译您的操作系统,那么它可能对您来说已经足够好了。在 Mac 上,您可以使用 XCode 作为您的 IDE,它与 g++ 的接口很好。在 Linux 上,有些人更喜欢命令行工具,尽管您可能喜欢 Eclipse C++ 支持,但今天它比 3-4 年前要好得多。

Windows 上的东西比较棘手。如果您负担得起,可以访问或有资格获得其中一个免费版本(例如,通过学校),我认为 Microsoft Visual C++ 环境(或现在所称的任何版本)非常适合学习,而且它们是用于生产。我认为现在实际上有一个轻量级的视觉工作室,重点是 C++,这可能是一个好的开始。如果你不这样做,你可能会找到一个特定于 C++ 的 Eclipse 发行版,并且包含一个 GNU 编译器的实现。

【讨论】:

  • 我使用的是 Windows Vista x64。我搜索了 C/C++ 的最佳 IDE,大多数人都在说 Microsoft Visual Studio,但是,我想为所有操作系统开发,而不仅仅是 Windows OS (XP/Vista/7)。我读过在选择 IDE 时考虑可移植性很重要。
  • 如果您正在开发游戏,您可能会使用平台专有的 2D/3D 图形 API,例如 DirectX 与 OpenGL 与 iPhone 上使用的任何东西。如果您只是学习 C++ 并使用标准库,那么无论您使用何种操作系统或编译器,您的代码都可以轻松移植。
  • @Adam:不,可移植性几乎与 IDE 选择 IMO 完全正交。选择你最喜欢的 IDE,用它来编写可移植的代码(即避免 IDE 编译器附带的编译器扩展),然后当你完成后,在你的其他目标平台上编译该代码,可能使用不同的编译器。例如,我使用 Visual Studio 编写大部分程序,然后使用 gcc 在 OS X/Linux 上编译项目。缺点是当我移植时,我必须编写一个单独的 makefile(MSVC 不使用它们),这很痛苦但值得。
  • +1 @user168715 我完全同意这种观点,尽管我倾向于另辟蹊径(使用 vim 编写,主要使用 GNU 工具构建/调试,在 Windows 上构建/测试,将任何更改向后移植到Linux,重复,直到相同的代码库适用于两者)。略有不同 - MSVC 确实 支持 Makefile(我使用它来使用 VS2008 构建,但使用 VC7.1 编译器),它们与 GNU makefile 的形式不完全相同:/。跨度>
  • 另外,如果您想使用 GNU makefile,这在技术上是可行的,但您必须使用外部命令而不是内部目标进行构建,并且您使用 VS 作为 IDE 的经验正在发展迅速减少……
【解决方案2】:

在您还在学习这些语言的同时使用 gcc 和 g++,这对于目前来说是一项足够大的任务。如果您以后需要专门的编译器,则需要对语言和问题领域有更深入的了解,才能正确评估候选人。

【讨论】:

  • @Potatoswatter:与什么相比?
  • 单独使用 gcc 和 g++ 是您学习时不必处理的麻烦。当你还在学习语言时,一个合适的 IDE 的好处,内置调试、构建管理等是不容忽视的。毕竟,简单地使用 g++ 并不能神奇地使您的代码具有可移植性。您仍然必须选择跨平台库。
  • 恕我直言 IDE 学习起来很糟糕:你最终会得到大量不是你自己创建的代码,而且你并不真正理解。
  • @Lo'oris:你的意思是说“代码向导”之类的东西对学习很糟糕。不要把婴儿和洗澡水一起倒掉;代码生成是一个好的 IDE 中最不重要的部分。
  • 我承认使用VS会让编译过程更难理解;例如,如果您必须手动构建一些东西,它更容易理解链接器错误。但根据我的经验,使用命令行工具学习的人最终要么忽略多个源文件,要么使用归结为g++ *.cpp 的构建过程,这两者都比让 IDE 处理棘手的部分有用得多.
【解决方案3】:

我觉得如果它是开源的,那么它将是一个更完整的编译器,因为它使用了许多程序员的观点来使它变得更好。

这不一定是真的。您也可以说,如果您使用 Microsoft 的编译器,它将最适合 Windows,因为 Microsoft 最了解如何为 Windows 优化编译器。

Microsoft 拥有免费的Visual C++ Express Edition,当然还包括一个非常适合 Windows 开发的出色 IDE。

但是,如果您对制作可移植软件感兴趣,请查看 GCC,它是 Linux 上的默认编译器,并且在 Mac 上也可用。 (iPhone 的工作方式完全不同,需要仅在 Mac OS X 上运行的特殊工具)。您可以使用CygwinMinGW 获取适用于Windows 的GCC。

【讨论】:

  • 好吧,我计划稍后将我在 Windows Vista 机器上编写的所有 C/C++ 代码转移到 MAC 环境中。我不认为 Visual C++ Express 对我来说是一个明智的选择。我不妨直接跳入 GCC 和 Cygwin。哪种 IDE 最适合 GCC for Windows 和 Cygwin?
  • 例如 Code::Blocks codeblocks.org 是免费的,可用于 Windows、Linux 和 Mac OS X。您也可以使用 Eclipse 或 NetBeans 进行 C++ 开发,尽管它们主要是 Java IDE .您需要在系统上安装 GCC,然后这些 IDE 将使用它来编译您的代码。
  • Cygwin 不错,但如果您正在开发商业应用程序,可能会出现问题。
  • 你可以在没有 Cygwin 的 windows 上使用 gcc (mingw)
  • 如果你想要真正可移植的代码,Cygwin 是一个糟糕的选择——它很容易将你推向 Unixisms。 MinGW 是一个不错的中间立场。也就是说,如果您坚持使用标准 C++ 的合理子集(唯一需要注意的是异常规范),您可以在 Windows 上使用 MSVC 和其他地方的 g++ 进行编译。过去两年,我在这样的(生产)环境中工作过,我们有一个非常大的代码库,以这种方式处理并没有太多麻烦。
【解决方案4】:

获取 Visual Studio Express(更简单、更快捷的 IMO 设置)并使用它进行学习;当您认为您对 C++ 以及“事物”如何工作足够了解时,您可以开始使用 QT 或 GCC(使用 cygwin)之类的东西,并学习移植到不同的平台。

【讨论】:

  • 工具包名为Qt(上Q,下T); QT 是 QuickTime(上 Q 和 T)。
  • 我明白了。也许你是对的。毕竟我只是一个初学者。肯定要考虑的事情。谢谢。
【解决方案5】:

对于 Windows,你可以使用 CodeBlocks,我相信它使用 gcc 并且非常用户友好

【讨论】:

  • 实际上,在 Windows 上,MinGW 自带 Code::Blocks :)
【解决方案6】:

我强烈建议使用MinGW

它是:

  • 开源
  • 适用于所有主要平台
  • 附带标准 Win32 头文件和库

【讨论】:

  • 在所有主要平台上都可用?这是否意味着它可用于 linux :p
  • MinGW 是用于 Windows 的特殊 gcc 版本。
  • @hhafez:它适用于 Linux。事实上,很多人使用它在 Linux 上构建 Windows 应用程序。然后他们在 WINE 中测试它们。
  • 当然它不适用于 linux,MinGW 专门用于 windows(因此 windows)所以不是它不适用于所有主要平台,适用于大多数主要平台的是 GNU 软件,它不等同于 minGW
  • @hhafez: MinGW 可用于 linux - 检查你的包管理器 - 它会在那里。
【解决方案7】:

编写可移植的 C++ 代码的关键是:

  • 使用跨平台版本控制系统(subversion 是一个不错的选择),因为这样更容易
  • 尽早并经常在其他平台上编译和测试您的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多