印象Clang

最近打算把项目做成跨平台的,使之能够在Mac上运行。做为XCode的默认编译器,据说Clang的编译速度很快,所以决定第一步就需要玩起Clang来。

在编译的过程中遇到不少问题,整理了如下几点:



编译速度

跟传说中的一样,确实很快。



错误提示

Clang的提示比cl精准一些,尤其是模版方面,不会有一堆错误信息。



模版支持

想比cl,Clang对标准的执行更严格些,或者说更死板些。

比如:

 1 template<class X>
 2 void doSomething(const X& x)
 3 {
 4  doOthering(x);
 5 }
 6 template<class Y>
 7 void doOtherthing(const Y& y)
 8 {
 9 .
10 }

         



doOtherthing声明在doSomething之后,但却在doSomething中使用。在这种情况下,cl编译是没有问题。在模版中,Clang也需要前置声明doOtherthing。



另外对typename的处理跟cl也有出入。幸好支持the new auto,所以能用auto的地方就大胆的用auto吧。



标准支持C++11

Clang3.0对C++11的支持太弱。std::shared_ptr, lambda, the new for统统不支持。Clang3.1加入了lambda支持。

cl2010也不支持the new for,但提供了个for each。for each用起来很爽,但要跨平台就得改啦!



其他

Clang要求构造函数初始化列表里面成员变量的初始化顺序要符合声明的顺序,这样可以消除潜在的bug。



结论

相比cl,Clang更严格执行C++标准。期待Clang尽快更新,对C++11做的更好。目前,项目的代码没办法顺利迁移用Clang编译。

原文链接: https://www.cnblogs.com/wuwuwu/archive/2012/07/22/6335158.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    印象Clang

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/56295

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午7:14
下一篇 2023年2月9日 上午7:14

相关推荐