对于初学者来说易于使用的 C++ 编译器有哪些建议?免费或开源的将是首选。
14 回答
对于简单的事情,GCC 是一个不错的选择。
Visual Studio Express 版是主要 Windows C++ 编译器的免费版本。
如果您在 Windows 上,我会使用 VS。如果你在 linux 上,你应该使用 GCC。
*我说 GCC 是为了简单的事情,因为对于更复杂的项目,构建过程并不那么容易
G++ 是 GNU C++ 编译器。大多数 *nix 发行版都应该有可用的软件包。
对于初学者: g++ --pedantic-errors -Wall
这将有助于从一开始就实施良好的编程。
gcc 与 -Wall(启用所有警告)-Werror(将警告更改为错误)、-pedantic(获取非标准代码的警告)和 -ansi(制作标准 c++98)。
如果警告是您知道并需要关闭的内容,您可以随时将它们转回警告。
我推荐 gcc,因为它设计用于命令行,你可以编译简单的程序并查看到底发生了什么:
g++ -o myprogram myprogram.cc
ls -l myprogram
一个文件进去,两个文件出来。使用 Visual C++,大多数人将它与 GUI 一起使用,您必须在其中设置一个项目,并且 IDE 会生成一堆文件,如果您刚刚开始,这些文件可能会妨碍您。
如果您使用的是 Windows,您将在 MingW 或 Cygwin 之间进行选择。Cygwin 设置起来有点麻烦,因为您必须选择要安装的软件包,但我没有使用 MingW 的经验。
您始终可以使用 Gnu Compiler Collection (GCC) 中的 C++ 编译器。它适用于地球上几乎所有的 Unix 系统、BSD、Mac OS、Linux 和 Windows(通过 Cygwin 或 mingw)。
许多 IDE 支持 GCC C++ 编译器,例如 Linux/KDE 下的 KDevelop 或其他帖子中提到的 Dev-CPP。
Microsoft Visual Studio Express Edition 的 C++ 编译器很好
CodeBlocks是一个非常好的 IDE,除了许多其他编译器 CL.EXE(来自 Visual Studio)和 gcc 之外,它还可以使用。它也有一个包含 gcc 的版本。
Visual Studio Express 版本也是一个很好的选择(如果您要开发调用 winapi 函数的应用程序,请使用 Platform SDK)。
Eclipse 是一个很好的 mac,或者 Apple 自己的免费 Xcode,可以从他们的开发站点上删除。
使用尚未提及的 g++ 或 MingW/Cygwin 的一个原因是启动和 IDE 将隐藏一些正在发生的事情。例如,理解编译和链接之间的差异将非常有用。从一开始就学习并理解它,你甚至不知道以后应该感谢自己。
-最大限度
I say GCC for simple things because for a more complicated project the build process isn't so easy
是的,但我不认为理解大型项目的构建过程与理解项目本身是正交的。我工作的最后一份工作是,他们有一个需要为目标平台 (LynxOS) 和仿真环境 (WinXP) 构建的庞大项目。他们选择将所有内容都放入一个用于 Windows 的 .VCP 文件中,并将其构建为一个大型可执行文件。在目标上它大约有 50 个单独的进程,因此他们编写了一个列出所有 3000 个源文件的生成文件,将它们全部编译到一个大库中,然后将每个可执行文件的各个 main.cpp 与一体化库链接,以制作 50 个可执行文件(它们可能与其他可执行文件共享 10% 的代码)。结果,没有开发人员知道哪些代码依赖于任何其他代码。因此,无处不在。分层构建系统可能有助于在原本杂乱无章的源代码存储库中强制执行某种顺序。
如果您不了解 .cpp 文件如何生成目标代码、什么是静态库、什么是共享库等等,那么在您学习 C/C++ 时,您仍然需要在某个时候学习它才能成为称职的 C/C++ 开发人员。
命令行中的 Visual Studio 的行为就像 GCC。只需打开 Visual Studio 命令行窗口,然后:
c:\temp> cl /nologo /EHsc /W4 foo.cpp
c:\temp> dir /b foo.*
foo.cpp <-- your source file
foo.obj <-- result of compiling the cpp file
foo.pdb <-- debugging symbols (friendly names for debugging)
foo.exe <-- result of linking the obj with libraries
我同意 Iulian Șerbănoiu 的观点:Code::Blocks 是一个非常好的解决方案,可用于 Linux(它将使用 g++/gcc)和 Windows(它将使用 MS 编译器或 gcc)
请注意,您应该至少尝试一次或两次尝试使用良好的旧 makefile 进行编译,如果只是为了了解标头、源、包含等背后的逻辑等等。
作为初学者,不要忘记阅读有关 C++ 的书籍(在尝试学习该语言的怪癖时,会想到 Scott Meyers 和 Herb Sutter 的书籍),并学习开源高调项目以学习他们的代码风格(他们已经遇到了您将遇到的问题,并且可能找到了可行的解决方案......)。