编译器比较:vc10.0 vs. mingw4.7.2

- 12 Jan 2013 , tags: compiler [1]

Prelude

windows下开发c++,不用ide就是找虐。

理由之一,cmd太TM难用。不用ide意味着手写makefile,手写的需要注意是msys环境还是cmd环境,脚本是不同的。如果是cmd环境,那你惨了,光是copy就要谷歌好久。高级一点的方法,也就是我之前使用了很久的一套方法,使用cmake或者premake等工具来自动生成makefile。其实当你写(其实“填”更恰当)这些CMakefile.txt, premake4.lua配置时,发现还不如有个ide设置的轻松一点。

理由之二,写makefile意味着要不停的打指令,反复切换窗口,间接的降低效率。程序员本来就短命,还要浪费这么多时间干这事,太不值得了。

理由之三,当你成为了makefile高手之后,vs2010你会用的很顺手。预编译头、项目依赖、git、测试编译后运行等等都会快速被解决。

有一点离题了,这篇文章要比较的是编译器的不同。之前makefile必须要用mingw系列套件。现在用ide所以顺理成章的用了vs2010的vc10.0,发现他们之间不是很统一。一句话总结是,各有各的好。

比较

  1. ranged for。gcc是4.7+是支持的,vc10不支持。但是foreach两者都支持。
  2. 文件内部引入静态库。vc是支持的,gcc不支持。这个vc干的好。当你用boost等有大量导入库的工具时,就不需要写导入哪些库的,boost源文件里已经帮你auto-link进来了。
  3. bind, function。都支持,他在里面。这可谓是c++11干的最漂亮的工作之一,合并了boost中很牛叉的2个东西。有了他们,可以方便的设计出无耦合的模式。其实最主要的作用是方便了测试代码的书写,都可以不用什么mock,stub了。
  4. lambda。这个必须有,大家都支持。合理搭配bind,boost::thread等神兵利器,你会发现c++才是最优雅的语言。他的闭包设计还支持局部变量的值引入,索引引入,比python的lambda方便一点。
  5. 细细看上面的比较,你会发现,很多都是对c11的特性的比较。而c11的特性又是大部分继承自boost,所以boost可以在某些时候补足编译器的不足。
  6. c11支持。gcc需要加参数如-std=c++11才会开启,vc10默认开启。
  7. 编译出的二进制文件大小。gcc的总的来说较大,vc的小。效率当然是vc的更高。
  8. 并行编译支持。应该是都支持的。gcc的我没用过。vc的很好用/MP可以打开。另外,并行计算openmp都是支持的。利用多核的优势很简单。
  9. win7等特定平台的库。gcc不支持,原因是导入库的格式未转换。gcc需要libxxx.a,而vc需要xxx.lib。vc必须支持的,都是MS亲娘生的。

结束语

win下不用ide坑爹,不用vc10.0更加坑爹。

分享到:
comments powered by Disqus