我四处寻找这些问题的答案,但运气不佳。 所以,我想我应该将它们发布在这里以获得一些澄清。 如果这是重复的,请告诉我,我将关闭它。
好吧,话虽如此,我想开始学习C++。 我有 C# 背景,非常尊重 Visual Studio 及其功能。 现在,我的问题是。 与非 Microsoft 版本(例如 MinGW)相比,Visual Studio 的编译器对于 C++ 的工作效果如何?
我的事情是这样的。 我对 Microsoft 没有任何问题,但我真的很想以“纯粹”的形式学习 C++,而不是被任何特定的实现所欺骗。 Visual C++ 对 .NET Framework 的依赖程度如何? 是否可以通过 Visual Studio 创建“纯”C++ 应用程序而不使用任何 .NET 或开销? Visual Studio 编译器是否像 C#/VB 那样将 C++ 编译为 CIL,还是像其他编译器一样将其一路向下编译?
感谢任何人可以提供的任何帮助!
Visual C++ 编译器会将 C++ 代码编译成与 .NET 框架无关的独立 EXE。
摆脱 .NET 包袱的唯一方法是将 C++ 编译为“托管”。
如果创建一个新项目(文件|新建|新建项目),则从项目类型的 Visual C++ 子菜单中选择“Win32”,然后选择“Win32 控制台应用程序” Visual studio 将创建一个简单的项目,其中包含几个源文件将编译为一个小的可执行文件。
大多数时候,Visual C++ 与其他编译器非常相似。避免#pragmas、微软库(MFC、ATL),你应该没问题。
编辑(感谢 Cheeso)- 有关 Visual C++ 与标准不同之处的文档。
一般来说,我建议对线程和网络使用 boost 库,因为它们可以在许多平台上工作(即 Linux)。此外,如果您的代码可以在 GCC 和 Visual Studio 中编译,那么您在保持其可移植性方面做得很好。
最新版本的 VC++ 已经变得更加符合 C++ 标准,因此使用 Visual Studio 编写“纯”C++ 并不是真正的问题,假设您不使用 Windows API、COM+ 和 ATL。事实上,Visual Studio的文档非常丰富,有标准库和STL的详细信息,所以它可以帮助你学到很多东西。它不能教您一切,但它肯定加载了可移植到任何编译器的大量信息,并且可以在 IDE 中轻松访问。
如果您创建新的解决方案,您应该选择新的 Win32 项目或 Win32 控制台应用程序,并选中“空项目”选项。然后您可以添加 main.cpp 文件,并添加您的标准 C++ 代码。
如果您喜欢 Visual Studio,请继续使用它来学习 C++——我还没有使用最新版本,但即使是前一个版本也非常符合标准,C++ 明智,我认为最新版本只能已经好起来了。 您可以在 Visual Studio 中拥有许多不同类型的项目,包括“控制台应用程序”,这是您可以在任何平台上制作的“普通”类型,还有许多其他类型,例如使用旧的 win32 api 的 Windows 应用程序、使用 MFC 或其他早于 .NET 的框架制作的、使用“托管代码”等的 .NET 制作的。
只要确保您始终在“控制台应用程序”项目中工作,您的操作方式将与在其他平台和/或其他 C++ IDE 上的操作方式非常接近。
如果您限制自己编写符合 ANSI C++ 的代码,那么您在 VS 中编写的代码将在其他编译器中工作,直到您必须与图形界面或 IO 交互。 然后您需要确保您使用的是可移植的东西,例如 OpenGL,而不是 DirectX。
要设置您的项目,此处的步骤可能有用: http://bytes.com/topic/net/answers/447572-strict-ansi-c
Microsoft Visual Studio 2005 附带了一个非常好的、符合 C++98 标准的纯 C++ 编译器。如果您对纯 C++ 感兴趣,请不要忘记在项目设置中禁用语言扩展,然后就可以开始了。没有人会强迫您使用 .NET 框架、MFC 或类似的东西。只是纯粹的核心C++语言和C++标准库。
当然,就像任何其他编译器一样,它也存在已知的不合规问题,但总的来说,它再次令人惊讶地好。他们的编译器的旧版本(特别是 MS VS 6.0)遭受了许多不合规问题,甚至无法在禁用语言扩展的情况下编译自己的头文件。在 2005 年版本中,他们修复了很多此类问题。
创建标准Win32项目后,您可以将合规性调高一些。在项目属性表上,有一个 C/C++ 类别,其中包含一个语言条目。这里列出了 VC++ can 与标准不同的一些情况。在这里,您需要关闭语言扩展,并打开“wchar_t 作为内置类型”、“for 循环一致性”和“RTTI 支持”。