精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何寫出優雅的C++代碼

開發 后端
工欲善其事必先利其器,優雅的代碼離不開靜態代碼檢查工具,大家可能平時使用較多的是cppcheck,但今天我想跟大家分享另一個靜態代碼檢查工具clang-tidy。

[[373379]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人 。轉載本文請聯系程序喵大人公眾號。

 工欲善其事必先利其器,優雅的代碼離不開靜態代碼檢查工具,大家可能平時使用較多的是cppcheck,但今天我想跟大家分享另一個靜態代碼檢查工具clang-tidy。

不同于cppcheck使用正則表達式進行靜態代碼分析,clang-tidy是基于語法分析樹的靜態代碼檢查工具,雖然它的速度比正則表達式慢一些,但是它檢查的更準確、全面,而且不僅可以做靜態檢查,還可以做一些修復工作,自行添加一些自定義檢查規則。

話不多說,上代碼:

  1. #include <iostream> 
  2.  
  3. int main() { 
  4.     int a = 1.2; 
  5.     return 0; 

這里有隱式類型轉換,可以使用clang-tidy來檢測:

  1. ~/test$ clang-tidy -checks=* test_lint.cpp -- 
  2. 7748 warnings generated. 
  3. /home/wangzhiqiang/test/test_lint.cpp:20:13: warning: implicit conversion from 'double' to 'int' changes value from 1.2 to 1 [clang-diagnostic-literal-conversion] 
  4.     int a = 1.2; 
  5.             ^ 
  6. Suppressed 7747 warnings (7747 in non-user code). 
  7. Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 

這里也許你有疑問了,這不就是一個普通的編譯警告嘛,正常使用編譯器也可以檢查出來,那再看一段代碼:

  1. #include <iostream> 
  2.  
  3. int main() { 
  4.     char* d = NULL
  5.     return 0; 

我們都知道在C++中應該更多的使用nullptr而不是NULL,這里使用了NULL而不是使用nullptr,可能我們在開發過程中沒有注意到這種用法,所以clang-tidy派上了用場:

  1. ~/test$ clang-tidy -checks=* test_lint.cpp -- 
  2. 7748 warnings generated. 
  3. /home/wangzhiqiang/test/test_lint.cpp:20:15: warning: use nullptr [modernize-use-nullptr] 
  4.     char* d = NULL
  5.               ^~~~~ 
  6.               nullptr 
  7. Suppressed 7747 warnings (7747 in non-user code). 
  8. Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 

再舉一個例子:

  1. struct Base { 
  2.     virtual void func() { 
  3.  
  4.     } 
  5. }; 
  6.  
  7. struct Derive : Base { 
  8.     virtual void func() { 
  9.  
  10.     } 
  11. }; 

這里可能我們乍一看沒有任何問題,其實在C++11里派生類繼承父類,重寫了某些函數時最好加上override關鍵字,通過clang-tidy還是可以檢測出來:

  1. ~/test$ clang-tidy -checks=* test_lint.cpp -- 
  2. 7749 warnings generated. 
  3. /home/wangzhiqiang/test/test_lint.cpp:14:18: warning: prefer using 'override' or (rarely) 'final' instead of 'virtual' [hicpp-use-override] 
  4.     virtual void func() { 
  5.     ~~~~~~~~~~~~~^ 
  6.                         override 
  7. Suppressed 7747 warnings (7747 in non-user code). 
  8. Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 

該工具還可以檢查代碼是否符合編碼規范,例如Google編碼規范等,看這段頭文件相關代碼:

  1. #include <iostream> 
  2. #include <string> 
  3. #include <memory> 

這里其實有一點點問題,頭文件引用順序不滿足編碼規范,這里其實clang-format都可以檢測出來,但clang-tidy也可以檢測出來,通過-fix還可以進行自動修復:

  1. ~/test$ clang-tidy -checks=* test_lint.cpp -- 
  2. 8961 warnings generated. 
  3. /home/wangzhiqiang/test/test_lint.cpp:2:1: warning: #includes are not sorted properly [llvm-include-order
  4. #include <string> 
  5. ^        ~~~~~~~~ 
  6. Suppressed 8960 warnings (8960 in non-user code). 
  7. Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well 

它還可以檢測隱藏的內存泄漏:

  1. int main() { 
  2.     char* ct = (char*)malloc(323); 
  3.     return 0; 

這是使用clang-tidy的檢測結果:

  1. ~/test$ clang-tidy -checks=* test_lint.cpp -- 
  2. 7756 warnings generated. 
  3. /home/wangzhiqiang/test/test_lint.cpp:20:5: warning: initializing non-owner 'char *' with a newly created 'gsl::owner<>' [cppcoreguidelines-owning-memory] 
  4.     char* ct = (char*)malloc(323); 
  5.     ^ 
  6. /home/wangzhiqiang/test/test_lint.cpp:20:5: warning: use auto when initializing with a cast to avoid duplicating the type name [hicpp-use-auto] 
  7.     char* ct = (char*)malloc(323); 
  8.     ^~~~~ 
  9.     auto 
  10. /home/wangzhiqiang/test/test_lint.cpp:20:11: warning: Value stored to 'ct' during its initialization is never read [clang-analyzer-deadcode.DeadStores] 
  11.     char* ct = (char*)malloc(323); 
  12.           ^ 
  13. /home/wangzhiqiang/test/test_lint.cpp:20:11: note: Value stored to 'ct' during its initialization is never read 
  14. /home/wangzhiqiang/test/test_lint.cpp:20:16: warning: C-style casts are discouraged; use static_cast [google-readability-casting] 
  15.     char* ct = (char*)malloc(323); 
  16.                ^~~~~~~~~~~~~     ~ 
  17.                static_cast<char*>( ) 
  18. /home/wangzhiqiang/test/test_lint.cpp:20:16: warning: do not use C-style cast to convert between unrelated types [cppcoreguidelines-pro-type-cstyle-cast
  19. /home/wangzhiqiang/test/test_lint.cpp:20:23: warning: do not manage memory manually; consider a container or a smart pointer [cppcoreguidelines-no-malloc] 
  20.     char* ct = (char*)malloc(323); 
  21.                       ^ 
  22. /home/wangzhiqiang/test/test_lint.cpp:21:5: warning: Potential leak of memory pointed to by 'ct' [clang-analyzer-unix.Malloc] 
  23.     return 0; 
  24.     ^ 
  25. /home/wangzhiqiang/test/test_lint.cpp:20:23: note: Memory is allocated 
  26.     char* ct = (char*)malloc(323); 
  27.                       ^ 
  28. /home/wangzhiqiang/test/test_lint.cpp:21:5: note: Potential leak of memory pointed to by 'ct' 
  29.     return 0; 
  30.     ^ 
  31. Suppressed 7747 warnings (7747 in non-user code). 
  32. Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well 

clang-tidy還有很多高端功能,大概可以檢測出250種問題,大體主要分為幾大類:

  • abseil:檢測abseil庫的相關問題
  • android:檢測Android相關問題
  • boost:檢測boost庫的相關問題
  • cert:檢測CERT的代碼規范
  • cpp-core-guidelines:檢測是否違反cpp-core-guidelines
  • google:檢測是否違反google編碼規范
  • llvm:檢測是否違反llvm編碼規范
  • performance:檢測性能相關的問題
  • readability:檢測與可讀性相關,但又不屬于某些編碼規范的問題
  • modernize:檢測是否使用現代C++11相關的代碼問題

而且適用于Windows/Linux/MacOS多平臺,還支持命令行,CLion/VSCode/VSStudio插件等,檢測規則還可以定制,重要的是免費開源,快去用起來吧,寫出優雅的C++代碼~

參考資料:

https://clang.llvm.org/extra/clang-tidy/

https://www.bilibili.com/video/av96166240/

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

2019-09-20 15:47:24

代碼JavaScript副作用

2022-03-11 12:14:43

CSS代碼前端

2020-05-14 09:15:52

設計模式SOLID 原則JS

2021-12-07 08:16:34

React 前端 組件

2020-07-15 08:17:16

代碼

2020-05-08 14:45:00

JS代碼變量

2020-05-11 15:23:58

CQRS代碼命令

2021-09-01 08:55:20

JavaScript代碼開發

2013-06-07 14:00:23

代碼維護

2021-11-30 10:20:24

JavaScript代碼前端

2022-02-17 10:05:21

CSS代碼前端

2022-02-08 19:33:13

技巧代碼格式

2020-05-19 15:00:26

Bug代碼語言

2020-12-19 10:45:08

Python代碼開發

2021-12-13 14:37:37

React組件前端

2022-10-24 08:10:21

SQL代碼業務

2015-09-28 10:49:59

代碼程序員

2019-06-24 10:26:15

代碼程序注釋

2021-04-29 21:54:44

Python代碼語言

2015-05-11 10:48:28

代碼干凈的代碼越少越干凈
點贊
收藏

51CTO技術棧公眾號

37p粉嫩大胆色噜噜噜| 国产美女主播在线播放| 国产美女裸体无遮挡免费视频| 欧美激情第8页| 日韩风俗一区 二区| 成人性生生活性生交12| av大片在线| 久久久综合网站| 91影院未满十八岁禁止入内| 人妻丰满熟妇av无码区| 久久久久久久久久久久久久| 日韩成人高清在线| 黄色aaaaaa| 范冰冰一级做a爰片久久毛片| 亚洲丝袜精品丝袜在线| 欧美综合77777色婷婷| 亚洲第一免费视频| 毛片不卡一区二区| 欧美性在线视频| 性欧美videos| 成人6969www免费视频| 精品国产99国产精品| 国内国产精品天干天干| 秋霞伦理一区| 亚洲综合一二三区| 在线一区日本视频| 黄色片在线免费观看| 成人h动漫精品一区二区| 成人免费观看a| 亚洲乱码国产乱码精品| 亚洲激情网站| 久操成人在线视频| 美女三级黄色片| 国产精品最新| 亚洲男人天堂2019| japanese在线观看| 大伊香蕉精品在线品播放| 8v天堂国产在线一区二区| 99久久久无码国产精品6| 国产盗摄在线视频网站| 尤物视频一区二区| 三上悠亚免费在线观看| 二区三区在线观看| 亚洲日本在线天堂| 日本福利视频导航| 欧美性天天影视| 国产精品久久久久婷婷二区次| 欧美一区二区三区四区在线观看地址 | 国产aⅴ精品一区二区三区黄| 一级黄色片免费| 麻豆精品在线观看| 成人黄色影片在线| 国产精品区在线观看| 精品一区二区三区香蕉蜜桃| 国产精品视频大全| 91亚洲欧美激情| 国内精品久久久久影院薰衣草 | 亚洲精华国产精华精华液网站| 国产一区二区三区四区在线观看| 91久久久久久久久久久| 国产精品熟女久久久久久| 久久99久久99小草精品免视看| 国产视频999| 99久久精品国产成人一区二区| 国产裸体歌舞团一区二区| 亚洲最大的av网站| 亚洲av少妇一区二区在线观看 | 欧美浪妇xxxx高跟鞋交| 不卡中文字幕在线观看| 精品国产亚洲一区二区三区大结局 | 欧美日本在线视频中文字字幕| 久久免费播放视频| 国产精品视频久久一区| 国产精品成人aaaaa网站| 这里只有久久精品视频| 国产在线播精品第三| 国产成人精品福利一区二区三区| 欧美 日韩 国产 成人 在线| 97久久超碰国产精品| 日韩精品一区二区三区四区五区| 91大神在线网站| 一区二区不卡在线视频 午夜欧美不卡在| 日本一级黄视频| 成人教育av| 欧美巨大另类极品videosbest | 三区在线视频| 国产午夜亚洲精品羞羞网站| 亚洲一区二区三区精品视频| 97超碰资源站在线观看| 狠狠色狠色综合曰曰| 日日噜噜噜噜久久久精品毛片| aa亚洲一区一区三区| 亚洲国产成人精品女人久久久 | 亚洲美腿欧美偷拍| 久久久一本二本三本| 日本午夜免费一区二区| 亚洲精品一区二区精华| 欧美波霸videosex极品| 国内自拍视频一区二区三区 | 日本特级黄色片| 久久99精品国产麻豆婷婷| 成人在线观看91| 91在线观看| 午夜欧美视频在线观看| 久久国产激情视频| 青青草原在线亚洲| 久久精品国产久精国产一老狼| 久久高清免费视频| 精品在线免费观看| 欧美国产综合视频| 免费男女羞羞的视频网站在线观看 | 天堂а√在线中文在线| 欧美特大特白屁股xxxx| 欧美不卡一二三| 国产麻豆a毛片| 久久九九精品| 久久精品日产第一区二区三区乱码 | 国产精品伦一区| 久久久999免费视频| 亚洲高清在线一区| 色婷婷综合久久久久| 国产嫩bbwbbw高潮| 国产成人av电影在线| 夜夜爽99久久国产综合精品女不卡| 高清在线视频不卡| 欧美成人精品3d动漫h| 91无套直看片红桃在线观看| 久久久国产精品一区二区中文| 国产精品久久久久免费| a视频在线观看| 欧美日韩国产123区| 少妇久久久久久久久久| 亚洲永久字幕| 精品乱色一区二区中文字幕| 精品精品导航| 日韩你懂的电影在线观看| 久久免费看少妇高潮v片特黄| 日韩高清不卡一区| 欧美日韩免费高清| 欧美成人影院| 亚洲欧美另类自拍| 婷婷激情五月网| 91麻豆产精品久久久久久| 国产精品无码一区二区在线| 成人av动漫| 久久久久中文字幕| 亚洲成人黄色片| 亚洲亚洲精品在线观看| 日本精品一二三区| 激情综合网址| 国产原创精品| 另类专区亚洲| 中文字幕av一区二区三区谷原希美| 国产免费一级视频| 国产亚洲成av人在线观看导航| 日日摸天天爽天天爽视频| 黑人操亚洲人| 国产精品热视频| 免费人成在线观看播放视频| 在线成人av影院| 免费中文字幕在线| 国产凹凸在线观看一区二区| 日韩成人三级视频| 欧美交a欧美精品喷水| 欧美一级黄色网| 成人网视频在线观看| 7777精品伊人久久久大香线蕉| 国精品无码一区二区三区| 高清视频一区二区| 欧美日韩二三区| av一区二区在线播放| 成人深夜直播免费观看| 国产天堂在线播放视频| 日韩激情视频在线| 亚洲天堂狠狠干| 亚洲女子a中天字幕| 亚洲欧美日韩偷拍| 视频一区二区国产| www亚洲国产| 国产一区二区在线视频你懂的| 欧美一级免费看| 黄色网址视频在线观看| 亚洲成人精品久久久| 亚洲另类在线观看| 综合精品久久久| 欧美成人三级伦在线观看| 日韩激情视频在线观看| 欧美日韩dvd| 国产伦精品一区二区三区视频| 国产欧美亚洲精品| 2001个疯子在线观看| 在线观看日韩av| 成人福利小视频| 色一情一伦一子一伦一区| 亚洲最大的黄色网址| 99re热视频精品| 色91精品久久久久久久久| 亚洲美女少妇无套啪啪呻吟| 手机成人在线| 久久精品色播| 91美女高潮出水| 成人影院入口| 欧美—级高清免费播放| 成人亚洲综合天堂| 亚洲精品动漫100p| 国产三级第一页| 天天影视涩香欲综合网| 成人在线观看免费完整| 国产视频一区在线观看| 精品伦一区二区三区| 美日韩一级片在线观看| a在线视频观看| 午夜视频精品| 一区二区三区久久网| 亚洲老女人视频免费| 高清免费日韩| 玖玖玖电影综合影院| 国产精品久久久久久久7电影| 91在线超碰| 久久成人国产精品| 91露出在线| 亚洲一区av在线播放| 五月天久久久久久| 欧美大片一区二区| 国产精品无码久久久久成人app| 一本色道亚洲精品aⅴ| 日韩精品在线不卡| 亚洲一区二区三区在线| 日本a级片视频| 国产精品久久久久久久久免费桃花| 五月婷婷综合在线观看| 成人污视频在线观看| 精品人妻无码中文字幕18禁| 激情六月婷婷综合| 不卡的在线视频| 久久99国产精品成人| 在线观看日本一区二区| 蜜臀av国产精品久久久久| 毛片av免费在线观看| 母乳一区在线观看| 欧美v在线观看| 久久国产精品亚洲77777| 成 年 人 黄 色 大 片大 全| 国内揄拍国内精品久久| 国产美女主播在线| 黄色精品网站| 国产乱子伦农村叉叉叉| 亚洲免费精品| 日韩久久一级片| 久久精品三级| 亚洲这里只有精品| 精品一区二区久久| 99中文字幕在线| 国产精品中文有码| aaa黄色大片| 成人一级视频在线观看| 丝袜熟女一区二区三区| 91丨国产丨九色丨pron| 国产精品1000部啪视频| 国产日韩高清在线| 国产三级aaa| 曰韩精品一区二区| 日本三级欧美三级| 日韩欧美国产一区二区| 亚洲大片免费观看| 欧美日韩日日夜夜| www.av日韩| 亚洲激情自拍图| 国产福利在线观看| 久久最新资源网| wwww亚洲| 国产成人精品免高潮在线观看| 福利一区二区| 99久久国产免费免费| 秋霞综合在线视频| 午夜精品福利一区二区| 中文精品久久| 日本福利视频在线| 蜜桃av噜噜一区二区三区小说| 女王人厕视频2ⅴk| 91香蕉视频mp4| 国产精品夜夜夜爽阿娇| 亚洲福利一区二区三区| 久久久国产免费| 欧美tk丨vk视频| 免费看男男www网站入口在线| 日韩在线播放av| 国模精品视频| 成人国产在线激情| 思热99re视热频这里只精品| 在线国产精品网| 在线一区欧美| 天天做天天干天天操| 久久综合色8888| 亚洲av鲁丝一区二区三区| 欧美性色视频在线| 亚洲av无码国产精品永久一区| 亚洲男人av在线| 免费在线观看av电影| 国产精品久久久久av| 超碰在线亚洲| 正在播放久久| 日韩av二区在线播放| 中文字幕一区二区三区乱码不卡| 国产精品欧美经典| 国产无人区码熟妇毛片多| 欧美一区二区视频在线观看2022| 深夜福利在线看| 九九热精品视频国产| 黄色精品视频| 久久免费一区| 亚洲欧美综合国产精品一区| 五月天激情视频在线观看| 99久久伊人久久99| 劲爆欧美第一页| 欧美日韩国产另类不卡| 男人的天堂在线| 97色在线播放视频| 亚洲一级大片| 亚洲小说欧美另类激情| 麻豆精品一二三| 女女互磨互喷水高潮les呻吟 | 九九热精品在线| 国产精品原创视频| 日本在线观看一区二区| 国产精品久久久一区二区| 91精品啪在线观看国产| 亚洲免费观看高清完整版在线观看| 日本黄色中文字幕| 精品亚洲一区二区三区四区五区| 青春草视频在线观看| 91亚洲精品在线观看| 久久影院100000精品| 欧美成人黄色网址| 久久久国产精品午夜一区ai换脸| 国产成人无码一区二区三区在线| 精品国产一区二区三区久久久蜜月| 精品51国产黑色丝袜高跟鞋| 国产精品视频999| 日韩精品永久网址| 欧美成人福利在线观看| 中文无字幕一区二区三区| 欧美人一级淫片a免费播放| 亚洲欧美日韩中文视频| 蜜臀国产一区| 日韩中文字幕一区| 免费在线看一区| 小嫩苞一区二区三区| 9191成人精品久久| av在线free| 亚洲一区二区三区毛片| 午夜精品久久| 日本五十肥熟交尾| 欧美日韩午夜视频在线观看| 欧美在线一卡| 国产精品av在线播放| 日韩视频在线观看| 天天操天天干天天做| 亚洲精品日韩综合观看成人91| 国内老熟妇对白xxxxhd| 久久久久久久久久久av| 欧美理伦片在线播放| 北条麻妃在线视频| 国产精品久久久久四虎| 国产黄色片网站| 97婷婷涩涩精品一区| 国产剧情一区| 久久综合在线观看| 亚洲国产精品视频| 欧美大片aaa| 成人黄色在线免费| 一区二区亚洲精品| 女尊高h男高潮呻吟| 欧美又粗又大又爽| 青草影视电视剧免费播放在线观看| 国产欧美日韩伦理| 日本不卡高清视频| 欧美做爰爽爽爽爽爽爽| 亚洲黄色av女优在线观看| 一区二区视频免费完整版观看| 一区二区三区四区五区精品| 成人性色生活片| 日韩精品在线一区二区三区| 另类美女黄大片| 九色精品国产蝌蚪| 欧美国产在线一区| 色综合天天视频在线观看 | 91爱视频在线| 欧美大人香蕉在线| 在线看黄色的网站| 欧美日韩在线精品一区二区三区激情| 老司机av在线免费看| 国内视频一区二区| 国产自产高清不卡| 久久久免费高清视频| 久久在线精品视频| 国产一区二区三区电影在线观看| 性鲍视频在线观看| 91福利在线看| 182在线播放|