精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩欧美天堂| 久久91导航| 成人一道本在线| 91国产一区在线| www.色天使| 国产精品黄色片| 亚洲免费电影在线| 精品欧美一区二区久久久伦| 亚洲精品中文字幕乱码三区91| 精品一区二区三区的国产在线观看| 欧美久久一二区| 久草视频国产在线| 成人在线免费电影| 国产电影精品久久禁18| 欧美洲成人男女午夜视频| 青青草自拍偷拍| 9l视频自拍九色9l视频成人| 91国偷自产一区二区三区观看| 中文字幕中文字幕99| 天天操天天操天天干| 免费中文字幕日韩欧美| 美女视频黄免费的亚洲男人天堂| 免费看黄色aaaaaa 片| 久久影视精品| 色综合久久中文字幕综合网 | 天堂av电影在线观看| 九九在线精品视频| 欧美在线一区二区三区四| 欧美黑人猛猛猛| 精品国产精品| 亚洲精品乱码久久久久久按摩观| 乌克兰美女av| 成人直播视频| 五月激情综合网| 欧美美女黄色网| 婷婷五月在线视频| 久久综合色综合88| 成人区精品一区二区| 一女二男一黄一片| 日韩一区二区久久| 欧美床上激情在线观看| 国产又粗又硬视频| 国产精品欧美在线观看| 亚洲第一中文字幕在线观看| 欧美性受xxxx黒人xyx性爽| 手机看片久久| 色成年激情久久综合| 免费国产黄色网址| bl在线肉h视频大尺度| 一区二区在线观看免费| 在线视频一二三区| 黄色网址在线免费| 亚洲欧洲日产国码二区| 亚洲精品中字| 在线免费观看黄色网址| 国产清纯白嫩初高生在线观看91| 欧美日韩亚洲一区二区三区在线观看 | 亚洲美女在线视频| 99久久免费看精品国产一区| 国产精品jk白丝蜜臀av小说| 亚洲成人网在线| 娇妻高潮浓精白浆xxⅹ| 大桥未久女教师av一区二区| 精品久久久三级丝袜| www.com日本| 国产suv精品一区| 亚洲国产天堂久久综合网| 久久精品女同亚洲女同13| 欧美福利在线播放网址导航| 日韩av网站大全| 天天躁日日躁aaaxxⅹ| 美女久久99| 尤物yw午夜国产精品视频明星| 九九九视频在线观看| 日韩精品dvd| 麻豆乱码国产一区二区三区| 九九热这里有精品视频| 夜夜嗨一区二区| 日本电影亚洲天堂| 中国女人真人一级毛片| 激情综合色播五月| 福利视频一区二区三区| 天天色综合久久| 国产视频一区不卡| 国产成年人在线观看| 在线观看中文字幕的网站| 亚洲成人动漫精品| 国产综合免费视频| 四虎国产精品免费久久| 欧美xingq一区二区| 亚洲天堂美女视频| 日韩情爱电影在线观看| 欧美国产激情18| 中文字幕手机在线视频| 激情六月婷婷久久| 国产亚洲精品自在久久| 福利视频在线播放| 亚洲视频一二三| 国内性生活视频| 伦一区二区三区中文字幕v亚洲| 欧美成人精品福利| 欧洲女同同性吃奶| 婷婷亚洲五月| 久久99精品久久久久久噜噜| 五月天激情四射| 国产精品综合在线视频| 欧美国产二区| 永久免费网站在线| 欧美三级视频在线观看| 亚洲天堂美女视频| 91精品久久久久久久久久不卡| 国产91精品久久久久久| 国产日韩欧美中文字幕| 国产亚洲人成网站| av无码久久久久久不卡网站| 国产亚洲欧美日韩精品一区二区三区 | 日韩视频精品在线观看| 国产精品亚洲一区二区三区| 五月天婷婷社区| 亚洲色图都市小说| 热久久精品国产| 国产精品香蕉| 另类天堂视频在线观看| 中文字幕一区二区三区四区欧美| 成人高清在线视频| 99热一区二区三区| 国产a亚洲精品| 亚洲激情在线视频| 久一区二区三区| 国产呦萝稀缺另类资源| 色阁综合av| 日韩美女在线看免费观看| 亚洲精品乱码久久久久久金桔影视| 一级黄色录像视频| 国内国产精品久久| 亚洲精品欧美精品| 台湾佬成人网| 亚洲嫩模很污视频| av中文在线播放| 99精品欧美一区二区三区小说 | 日韩电影免费在线观看中文字幕| 青娱乐国产在线视频| 久草热8精品视频在线观看| 亚洲成人第一| 丁香久久综合| 尤物九九久久国产精品的特点| 草莓视频18免费观看| www日韩大片| 欧美性大战久久久久xxx| 欧美成人午夜77777| 97国产精品视频| 四季av日韩精品一区| 午夜精彩视频在线观看不卡| 亚洲熟女乱综合一区二区三区| 影音先锋日韩资源| 国产精品一区二区三区四区五区| 日韩欧美一起| 亚洲第一精品夜夜躁人人躁 | 久久aⅴ乱码一区二区三区| 精品欧美一区二区久久久伦| 久久电影tv| 宅男66日本亚洲欧美视频| 中文字幕在线观看精品| 国产精品久久久久久久久快鸭| 亚洲免费av一区| 91精品成人| 国产精品成人一区二区三区 | 国产成人精品电影久久久| 成人资源www网在线最新版| 精品视频色一区| 性欧美videos| 成人h动漫精品| 美女福利视频在线| 成人aaaa| 亚洲一区二区三区视频| a级片免费在线观看| 亚洲精品成人av| 精人妻无码一区二区三区| 国产精品乱码久久久久久| 国产探花在线观看视频| 一级成人国产| 亚洲精品国产精品国自产观看| 欧美午夜在线播放| 国内精品久久久久| 高h视频在线| 精品国内二区三区| 无码人妻精品一区二区三区蜜桃91| 中文字幕av资源一区| 中文字幕无码毛片免费看| 亚洲欧美日本日韩| 黄瓜视频免费观看在线观看www| 一区二区三区免费在线看| 青草热久免费精品视频| 欧美三级理伦电影| 亚洲成人教育av| 一区二区三区在线免费观看视频| 夜夜操天天操亚洲| 欧美激情aaa| 国产精品一区二区在线观看不卡| 免费黄色日本网站| 91精品一区二区三区综合在线爱| 精品国产乱码久久久久久郑州公司 | 日本美女视频网站| 日韩av中文字幕一区二区| 中文字幕精品在线播放| 伊人久久大香线蕉综合网站| 91精品网站| jizz久久久久久| 97国产成人精品视频| 黄色网址视频在线观看| 日韩成人av网址| 国产白浆在线观看| 91黄色在线观看| 久久久久99精品| 最新国产精品久久精品| 亚洲欧美色图视频| 国产成人亚洲精品狼色在线| 已婚少妇美妙人妻系列| 国内在线观看一区二区三区| 亚洲三区四区| 亚洲电影男人天堂| 国产精品视频免费一区二区三区| 豆花视频一区| 国产精品一区二区3区| 巨茎人妖videos另类| 欧美精品久久久久久久久| 免费日本一区二区三区视频| 夜夜嗨av一区二区三区免费区| 天天射,天天干| 日韩免费高清av| 国产日韩免费视频| 91麻豆精品久久久久蜜臀| 欧美高清69hd| 欧美性高清videossexo| 五月天婷婷激情| 亚洲一区在线观看免费| 青青草原免费观看| 亚洲欧美色一区| 国产精品精品软件男同| 国产精品国产三级国产aⅴ入口| 美女久久久久久久久久| 99国产精品99久久久久久| 色哟哟视频在线| 成人免费视频免费观看| 四虎永久免费观看| 成人在线综合网站| 美国黄色一级视频| 国产成人av电影在线播放| 亚洲成人激情小说| 国产米奇在线777精品观看| 黄色永久免费网站| 久久9热精品视频| 亚洲免费av一区| 经典三级在线一区| 一区二区三区人妻| 成人动漫视频在线| 熟女丰满老熟女熟妇| 久久久精品一品道一区| 亚洲做受高潮无遮挡| 久久精品男人天堂av| 污污视频网站在线免费观看| 中文字幕一区二区三区视频| caoporn91| 亚洲va欧美va国产va天堂影院| 国产女同在线观看| 一本色道久久加勒比精品| 自拍偷拍18p| 欧美日韩不卡一区| 精品国产乱码一区二区三| 精品国产免费久久| 四虎影院在线播放| 中文字幕亚洲欧美在线| 黄色网址视频在线观看| 久久久视频在线| 欧美freesex| 成人淫片在线看| 国产欧美一区二区三区米奇| 久久涩涩网站| 91日韩视频| 欧美一级免费播放| 日韩电影在线一区二区| 日韩a一级欧美一级| 成人精品视频网站| 极品蜜桃臀肥臀-x88av| 自拍av一区二区三区| 国产精品老女人| 欧美日韩在线播放一区| 黄频在线免费观看| 影音先锋日韩有码| 亚洲国产精品精华素| 欧美中文字幕在线| 日本精品在线观看| 噜噜噜噜噜久久久久久91| 9999国产精品| 黄色一级视频片| 精品一区二区三区影院在线午夜 | 日韩有码免费视频| 精品在线观看视频| 中文字幕5566| 一区二区三区中文免费| 天天操天天干天天摸| 日韩女同互慰一区二区| 成人午夜影视| 91精品国产沙发| 国产午夜亚洲精品一级在线| 另类小说综合网| 亚洲午夜av| 加勒比av中文字幕| 久久综合色综合88| 免费毛片在线播放免费 | 精品国产999久久久免费| 亚洲视频视频在线| 啪啪免费视频一区| 国产精品一区av| 精品国产一区探花在线观看| 黄页免费在线观看视频| 国产乱一区二区| 日本午夜精品视频| 一本色道久久综合亚洲91| 天堂v在线观看| 色综合男人天堂| 高清久久一区| 亚洲永久激情精品| 日本欧美一区二区| 国产夫妻性爱视频| 亚洲成人av免费| 亚洲乱码在线观看| 久久伊人免费视频| 欧美高清影院| 一区二区三区视频在线播放| 久久综合激情| 三上悠亚ssⅰn939无码播放| 午夜精品福利久久久| 殴美一级特黄aaaaaa| 欧美丰满少妇xxxxx做受| 99视频这里有精品| 亚洲欧洲精品一区| 免费精品视频在线| 五月婷婷欧美激情| 在线观看国产日韩| 国产小视频在线观看| 日本视频久久久| 久久成人av| 激情婷婷综合网| 国产日本欧美一区二区| 国产成人无码专区| 亚洲视频综合网| 欧洲成人一区| 伊人av成人| 国产美女主播视频一区| 欧美极品视频在线观看| 欧美变态口味重另类| 美洲精品一卡2卡三卡4卡四卡| 99精品99久久久久久宅男| 欧美区一区二| 中文字幕在线视频播放| 天天操天天色综合| 日韩av资源| 国产精品免费看久久久香蕉| 日韩免费视频| 日本55丰满熟妇厨房伦| 亚洲综合视频网| 天天干视频在线观看| 日本最新高清不卡中文字幕| 精品国产美女| 亚洲天堂av一区二区| 一区二区三区在线视频观看58 | 亚洲国产成人精品女人久久| 亚洲视频在线观看视频| 国产一区精品福利| av久久久久久| 99精品视频在线播放观看| 亚洲精品毛片一区二区三区| xvideos成人免费中文版| 日本精品视频| 免费av网址在线| 亚洲欧美一区二区视频| 国产 日韩 欧美 综合| 热re99久久精品国产66热| 日韩精品二区| 大尺度在线观看| 欧美最猛黑人xxxxx猛交| 在线黄色网页| 秋霞久久久久久一区二区| 国产麻豆成人传媒免费观看| 中文字幕亚洲精品在线| 国产一区二区三区在线免费观看| 国产高清亚洲| 日韩精品一区二区三区久久| 国产精品久久久久久一区二区三区| 亚洲精品成人电影| 国产精品1234| 激情久久五月| 精品少妇一区二区三区密爱| 亚洲电影天堂av| 日韩欧美三区| 播放灌醉水嫩大学生国内精品| 中文字幕亚洲不卡| 日本护士...精品国| 91在线网站视频|