繁体   English   中英

如何在Mac上的c ++中编译源代码,以确保在遵循ANSI / ISO的同时在Windows Visual Studio编译器中正确编译源代码

[英]How should I compile source code in c++ on a mac to ensure it will compile correctly in Windows Visual Studio Compiler while adhering to ANSI/ISO

我正在上一堂课,人们期望我们提交的源代码可以在我们的教授计算机上编译。 似乎合理。 我真的不想安装Windows或使用可视化。 我的一位同学发布了下面的代码可以解决问题。 有什么想法吗? 可以将其改进为更接近严格的ANSI / ISO c ++编译吗?

$ g++ -std=c++98 -Wall -Wextra -Werror main.cpp -o outputprogram

我的操作系统是10.8.x g ++是:

  i686-apple-darwin11-llvm-g++-4.2

而gcc是

 i686-apple-darwin11-llvm-gcc-4.2: 

如何在Mac上的c ++中编译源代码,以确保在遵循ANSI / ISO的同时在Windows Visual Studio Complier中正确编译源代码

你真的做不到。 不可能。 编译器在不同位置的行为略有不同,有时会导致编译失败和/或略有不同的程序行为。 当涉及到Microsoft编译器时,它可以愉快地编译使G ++(通常是模板)感到困惑的代码,反之亦然,即使您不考虑非标准功能和扩展,也是如此。 因此,测试编译器的唯一肯定方法是使用该编译器。

在开发应该与g ++ / cl.exe(cl.exe == microsoft编译器)一起工作的代码时,我个人遇到的问题。

  1. 与cl.exe相比,g ++异常缓慢,至少在Windows上是如此。 (慢2..5倍)
  2. g ++有时不能很好地编译模板构造cl.exe进程。
  3. cl.exe无法处理疯狂的大字符串常量(与g ++相比)。
  4. 如果没有BOM表,cl.exe(VS2008 Express)无法检测到UTF8编码。
  5. 将编码与cl.exe混合使用(当OS使用编码A时,源文件位于encoing B中,并且您想使用需要编码C的函数来显示wchar_t字符串)是一场噩梦。
  6. C标准库函数在cl.exe / g ++上有所不同。 一个编译器可以具有另一个编译器不存在的函数(其中一些不具有字符串* ncmp函数),编译器可能具有另一个编译器(strcpy_s)不存在的非标准函数,并且某些函数对于某些参数的行为可能有所不同(带有“%S”的sprintf)
  7. 如果包含windows.h,则将-Wall传递给cl.exe会生成数千条无害代码的警告。 这些警告无法修复。

可能还有更多,但是我现在才记得。

我真的不想安装Windows

您可以尝试使用Wine将Microsoft编译器安装到MacOS上。 我希望您将无法使用Wine安装Visual Studio IDE (您的想法可能会警惕),但是您应该能够运行Windows Driver Kit附带的仅命令行Microsoft编译器。 但是,要以这种方式使用编译器,您必须非常熟悉它,因此将Windows安装到虚拟机中可能会容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM