visual C++/CLI和编译器选择
visual C++/CLI and compiler choice
Visual Studio是否只生成C++/CLI?有人告诉我要像躲避瘟疫一样躲避C++/CLI和Microsoft编译器。
我想学习如何编写独立于平台的软件,那么你推荐什么"真正的C++"编译器呢?(从我目前收集的信息来看,C++/CLI似乎会将我绑定到Windows,因为它依赖于一些Windows库)
Visual Studio是否只生成C++/CLI?
不,Visual C++编译器支持ISO C++03(有一些一致性问题)和许多C++11特性。它还支持C++/CLI和(在即将推出的版本中)C++/CX,但不要求您使用这两种语言扩展。
我想学习如何编写独立于平台的软件,那么你推荐什么"真正的C++"编译器呢?
确保C++代码不依赖于某个特定编译器的功能的最佳方法是使用多个编译器进行编译。
首先,VC++编译器根本不会产生C++/CLI。C++/CLI是一种描述程序的文本语言,而不是编译器输出。
使用/clr
选项时,它接受标准C++或C++/CLI,并生成.NET MSIL代码("纯"MSIL或混合模式程序集)。当不使用/clr
时,它只接受标准C++(带有一些Microsoft扩展,主要与对C++11草案的支持有关,其中一些与C++11最终标准不兼容),并生成本机代码。
唯一"生成"C++/CLI代码的是Visual Studio新项目向导和WinForms设计器,并且仅当您选择创建C++/CLI项目时。还提供了用于本机代码和本机对话框编辑器的新项目模板。这些向导都不是VC++编译器的一部分。
不,Visual Studio几乎可以是一个真正的c++编译器。
我想学习如何编写独立于平台的软件
祝你好运!如果你想办法让我们都知道!
抛开玩笑不谈。。。
如果你希望你的代码是独立于平台的,那么你确实应该避开特定于平台的库(比如win32api)。
正如其他答案中所述,VC++并不完全符合C++规范(不确定是否有任何编译器100%符合)。
在windows上使用GCC(例如mingw、cygwin)可能会让您在以后将代码移植到不同的平台时更轻松。试试VC++和MinGW,看看你更喜欢哪一个。使用它们各不相同。如果您想要一个用于MinGW的IDE,请尝试Code::Blocks。
然而,在一个足够复杂的项目中,编写能够与许多不同的c++编译器一起工作的代码变得非常困难,甚至很难与同一编译器的不同版本一起工作!如果你看过boost(一个充满了奇妙但有时很复杂的库的c++项目),它旨在处理各种各样的编译器,那么它似乎有更多的代码来处理编译器中的差异,而不是真正完成任务的代码(也许有点夸张)。
这个问题:如何用c++编写可移植代码?有一些好的提示。
- Python:在Windows上选择C++编译器 - MS Visual Studio到Mingw-w64.(PySta
- 模板实例化失败:编译器选择不正确的重载函数
- 编译器选择错误的重载函数
- 为什么C 编译器选择错误的功能(模板)
- 强制编译器选择常量运算符重载
- 如何获取指向编译器选择的重载函数的函数指针
- G++:有哪些方法可以找出编译器选择了哪个模板专用化
- C++ 编译器选择输出流运算符<<的错误重载
- 如何轻松知道编译器选择了哪些特殊成员函数
- 编译器选择函子而不是具有相同名称的函数
- "string_literal"解析为布尔值,但不解析为 std::string,当编译器选择函数的重载版本时
- visual C++/CLI和编译器选择
- 为什么编译器选择这个模板函数而不是重载的非模板函数?
- 为什么在这段代码中,编译器选择了r值的ref版本
- 编译器选择了错误的运算符<<
- 为什么编译器选择const方法而不是非const方法
- 强制编译器选择以 const T& 作为参数的复制构造函数
- C++编译器选择类成员函数的错误重载
- 编译器选择专门用于数组的模板,但随后尝试将数组参数强制转换为指针
- 编译器选择了错误的模板函数专用化