ç§ãã¡ã®ããŒã ã¯éåžžã«å¿ããå€ãéãããŸããããã®çµæã仿¥å ±æããããšãæ¥ãã§ããŸããã ãããCLion 2020.2ã®æ°ãããªãªãŒã¹ãæè¿ããŸãïŒæ°ããããŒãžã§ã³ã«
å«ãŸãããã®ã«ã€ããŠç°¡åã«èª¬æããŸãã
- Makefileãã¶ã€ã³ã¢ãã«ã®ãµããŒãã
- CMakeã®ææ°ã¢ããããŒãã
- C++20:
explicit(bool), (designated initializers),for. - : (dangling pointers), , , , .
- -: doctest, Catch2 Google Test. .
- PlatformIO .
- .
- .
- .
Makefile
ä»å¹Žã®æ¥ã«CLionã®5åšå¹Žãè¿ããç§ãã¡ã¯ãIDEã§æãæåŸ ãããŠããæ©èœã§ããMakefileã«åºã¥ããããžã§ã¯ãã®ãµããŒãã®ç©æ¥µçãªå®äºã«ããã«é¢äžããŸããããããŸã§ã¯ã倧èãªãŠãŒã¶ãŒã«å人çã«è©ŠããŠãããããã®å€§ãŸããªãããã¿ã€ããããããŸããã§ããã圌ãã®ãããã§ãããŸããŸãªMakefileãããžã§ã¯ãã§ãããã¿ã€ãããã¹ããããã®äžã®å€ãã®åé¡ãä¿®æ£ãããœãªã¥ãŒã·ã§ã³ã®çŸåšã®ïŒã§ããã°äžæçãªïŒå¶éãçè§£ããããšãã§ããŸãããç§ãã¡ã®ç®æšã¯ããŠãŒã¶ãŒãCLionã®Makefileãããžã§ã¯ãã§ãããã²ãŒã·ã§ã³ããªãã¡ã¯ã¿ãªã³ã°ãéçã³ãŒãåæãªã©ã®ãã¹ãŠã®ã¹ããŒãIDEæ©èœã䜿çšã§ããããã«ããããšã§ãã
èŠããã«ãçŸåšã®ã¢ãããŒãã¯æ¬¡ã®ãã
makeã«ãªããŸããCLionã¯ã远å ãªãã·ã§ã³ã䜿çšããŠãããžã§ã¯ãã§ã³ãã³ããå®è¡ããŸãã--just-printå®éã®çµã¿ç«ãŠã«ãããæéãç¯çŽããŸããCLionãã³ãã³ãåºåãæ£åžžã«è§£æã§ããå Žåããããžã§ã¯ããéãããã¹ãŠãæ©èœããŸãã
CLionã§ã®MakefileãµããŒãã®äœæ¥ããŸã å®äºããŠããªãããšãããã«äºçŽããŸãããããŸã å€ãã®æ¢ç¥ã®å¶éãšæ¬ é¥ããããŸããæã泚ç®ãã¹ãïŒ
- libtoolïŒCPP-19549ïŒãdistccããã³ccacheïŒCPP-19305ïŒãããã³åºåããã³ã³ãã€ã«ãã©ã°ããé衚瀺ãã«ããããŸãã¯ã³ãã³ãåºåã«å¹²æžãããã®ä»ã®ã©ãããŒã䜿çšãããããžã§ã¯ãã¯ãµããŒããããŠããŸãã
makeã - CLionã¯ãGNU Makes以å€ã®åºåïŒNMakeãBSDãªã©ïŒããŸã åŠçã§ããŸããïŒCPP-18723ïŒã
- ãã«ãããã»ã¹äžã«ãã£ã¬ã¯ããªåã®ãªã¹ããç¡å¹ã«ãããããžã§ã¯ãã¯ãµããŒããããŠããªããããCLionã¯ã©ã®ãã¡ã€ã«ãã©ã®ãã«ãã³ãã³ãã«åºæã§ããããå€å¥ã§ããŸããã
ããããçŸåšã®ãœãªã¥ãŒã·ã§ã³ã§ããããã§ã«CLionã§Linuxã«ãŒãã«ãŸãã¯PostgreSQLããŒã¿ããŒã¹ãµãŒããŒã³ãŒããéãããšãã§ããŸããèå³ãããå Žåã¯ããããã¿ã€ããæ©èœãããããžã§ã¯ãã®çŸåšã®ãªã¹ãïŒããã³ã瀺ãããåé¡ããããæ©èœããªãããã€ãã®ãããžã§ã¯ãïŒããã®ããŒãžã§èŠã€ããããšãã§ããŸãã
ãããžã§ã¯ãã詊ãã®ã¯ãšãŠãç°¡åã§ãã
- MakefileãååŸããããã«ãããžã§ã¯ããæºåããŸãïŒããšãã°ã
./configureCLionèªäœã¯ãŸã ãããè¡ãæ¹æ³ãç¥ããªããããå€ãã®å Žåããããžã§ã¯ããéå§ããå¿ èŠããããŸãïŒã - ãã¡ã€ã«ã§ãããžã§ã¯ããéã| ã¡ã€ã³ãããžã§ã¯ãã®Makefileãå«ããã£ã¬ã¯ããªããŸãã¯ãã®ãã¡ã€ã«èªäœãçŽæ¥éããŠæå®ããŸãããããžã§ã¯ããšããŠéãããšã確èªããŸãã
- CLion , Clean. ,
make, . - , , ! Build.
åºåã«ã¯ããã€ãã®èŠåãå«ãŸããŠããå ŽåããããŸãããããŠã³ããŒããå šäœãšããŠæ£åžžã«å®äºããå ŽåïŒæåã®ã¿ã¹ã¯ã®æšªã«ç·è²ã®ããŒã¯ãããã¯ãã§ãïŒãCLionã§ãããžã§ã¯ããæäœã§ããŸãã
èµ·åã³ãã³ãã®åŒæ°èšå®ãèµ·åã«äœ¿çšãããããŒã«ãã§ãŒã³ãããã³ãã®ä»ã®ãªãã·ã§ã³ã¯ã[èšå®] / [èšå®] | [èšå®]ã«ãããŸãããã«ããå®è¡ãå±é| MakefileïŒ
Makefileã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã³ãããã°ããã«ã¯ã远å ã®Makefileã¢ããªã±ãŒã·ã§ã³æ§æãäœæããå¿ èŠããããŸãããã®å Žåãã¿ãŒã²ããã¯ããããããŠã³ãªã¹ãããéžæã§ããŸã-CLionã¯ãã©ã®ãªãã·ã§ã³ãããããæããŠãããŸãã
è±èªã®ããã°ã§ãCLionã§ã®Makefileãããžã§ã¯ãã®æäœã«é¢ãã詳现æ å ±ãèŠã€ããããšãã§ããŸãããŸããçããã¢ïŒè±èªïŒãèŠèŽããããšããå§ãããŸãã
CMakeã®ææ°ã¢ããããŒã
çµ±èšã 瀺ãããã«ãçŸåšC ++éçºè ã®éã§æã人æ°ã®ãã3ã€ã®èšèšã¢ãã«ã¯ãCMakeãmsbuildãããã³Makefileã§ãããããŠããã®è©äŸ¡ã3幎éãªãŒãããæé·ãç¶ããŠããã®ã¯CMakeã§ãããã®ãããCLionã§çŠæ¢ãããŠããCMakeã®ããŒãžã§ã³ãåžžã«æŽæ°ããCMakeèªäœã®ææ°ã®ã€ãããŒã·ã§ã³ã®ãµããŒãã«åãçµãã§ããŸããä»åã¯ããŒãžã§ã³ã3.17ã«æŽæ°ããããã«å¿ããŠ2ã€ã®æ°ãã䟿å©ãªCMakeæ©èœã®ãµããŒãã远å ããŸããã
- Ninja Multi-Config ( Debug Release) Ninja (
-G "Ninja Multi-Config"). CLion , CMake . UI, . - CMakeã®ããªã³ã³ãã€ã«ãããããããŒã¯ãã£ãšæ³šç®ã«å€ããŸããäžè¬ã«ãããªã³ã³ãã€ã«ãããããããŒãã¡ã€ã«ïŒPCHïŒã®ã¢ã€ãã¢ã¯æ°ãããã®ã§ã¯ãªããã³ã³ãã€ã©ãŒã«ãã£ãŠé·ãéãµããŒããããŠããŸãããCLionãããªãåããPCHã䜿çšããŠããŸããããã§ãPCHã®ã³ã³ãã€ã©ãã©ã°ãèŠããŠãç¬èªã®æ¹æ³ã§ç¹å®ã®åã³ã³ãã€ã©ã«CMakeã«æž¡ãå¿
èŠã¯ãããŸããããã³ãã³ãã䜿çšããŠPCHã¿ãŒã²ãã倿°ã«ããããŒãã¡ã€ã«ã远å ããã ã
target_precompile_headersã§ããCLion 2020.2ã¯ãããã§åäœã§ããããã«ãªããŸããã

ãŸããCMakeçæã®çµæã䜿çšããŠããã£ã¬ã¯ããªããCLionã§CMakeãããžã§ã¯ããéãæ©èœã泚ç®ã«å€ããŸããããã¯ãMakefileãžã§ãã¬ãŒã¿ãŒã ãã§ãªãããã®ä»ã®æ©èœã«ã䜿çšã§ããŸããæéãç¯çŽ-ãããžã§ã¯ãã§CMakeã³ãã³ããåèµ·åããã«ãCLionã§æ¢ã«ãã«ãããããããžã§ã¯ããéããŸãã
C ++ 20
ç§ãã¡ã®ããŒã¿ ã«ãããšãä»å¹Žãã§ã«C ++éçºè ã®12ïŒ ãC ++ 20æšæºã䜿çšããŠããããšããåç¥ã§ããïŒïŒãã®ããããã¡ãããCLionã®æ°æ©èœã®ãµããŒãã«ãç©æ¥µçã«åãçµãã§ããŸããããããæåã«CLionã®èšèªãšã³ãžã³ã§äœãã§ããããæãåºããŸãããã
ãã®ãããçŸæç¹ã§ã¯2ã€ãããŸããC++ã«ã¯ãããããJava / Kotlinã«åºã¥ãçµã¿èŸŒã¿ã®ãã®ãšãClangdã«åºã¥ãããªãæ°ãããã®ã§ãïŒCLionã䜿çšããŠéçºããŠããŸãïŒãçŸåšããã¹ãŠã®åªåãClangdããŒã¹ã®ãšã³ãžã³ã«æ³šãããŠããŸãããããžã§ã¯ãå šäœã«å¯Ÿããã¢ã¯ã·ã§ã³ïŒãªãã¡ã¯ã¿ãªã³ã°ãªã©ïŒã¯ãŸã å®è¡ã§ããŸããããããã¯è¯ãèŠéãã®ããã§ããããã§ã¯ãç¹å®ã®æé©åãšé å»¶ãã解決ã®ããã«ããããŠãã¡ãããã£ãã·ã¥ã®ååšã®ããã«ãäžå®å šã§æã é ãJavaããŒã¹ã®ãšã³ãžã³ãåã¡ãŸãããªãã¡ã¯ã¿ãªã³ã°ã«å¿ èŠãªèšå·ã
ããããClangdã«ã¯éåžžã«å€§ããªå©ç¹ã1ã€ãããŸãããããžã§ã¯ãããªãŒãã³ã§ãããããã³ãã¥ããã£å šäœãClangã®ææ°ã®C ++æšæºããµããŒãããããã«ããã§åãçµãã§ããŸãããã¡ãããããã¯ç§ãã¡ãäœãããå¿ èŠããªãããšãæå³ãããã®ã§ã¯ãããŸãã-ãšã«ããããã®ãµããŒãã¯CLionã®ããŒãºã«é©åãããå¿ èŠããããŸããããããããã¯C ++æ©èœã®ãµããŒããæåããäœæããããããã§ã«ç°¡åã§ãããŸããClangã§ã®ãµããŒãã«åºã¥ããŠãç¬èªã®ç¹å®ã®åæãèšè¿°ããããããã€ãã®ç¹å¥ãªæ©èœãå®è¡ãããã§ããŸãïŒããšãã°ãæ°ãªãªãŒã¹åã«Conceptsã®èªåè£å®ãè¡ããŸããïŒã
LLVMã«ä»å±ããClangdãšã³ãžã³ã®ææ°ã®æŽæ°ããC ++ 20ã³ãŒãã§ããå®å®ããŠåäœããããšã確èªããŸãããäžè¬ã«ãçµã¿èŸŒã¿ã®çµ±èšã«ããã°ãClangdãšã³ãžã³ã¯ããå®å®ããŠããŸãããã®ãããClangdãšã³ãžã³ãå®å šã«ç¡å¹ã«ããæ©èœã¯èšå®ããââåé€ãããŸãããããããèšå®/èšå®ã«è¿œå |èšèªãšãã¬ãŒã ã¯ãŒã¯| C / C ++ |ç§ãã¡ã®ãšã³ãžã³ãæ§ç¯ãããŠãããªããžã§ã³ã«é¢ããClangdæ å ±ãããã§ãC ++ã®ãµããŒããšçµã¿èŸŒã¿ã®Clang-Tidyã®åæã®èгç¹ããäœãæåŸ ã§ããããããããŸããã
ã¡ãªã¿ã«ããªã³ã©ã€ã³ãã«ãã«ã¯ã C ++æ©èœã®ãµããŒãã®èгç¹ãã2ã€ã®ãšã³ãžã³ãæ¯èŒåæããåªããèšäºããããŸãã
ãããŠä»ãC ++ 20ãµããŒãããå®éã«è¿œå ããããã®ã«ã€ããŠïŒ
- C ++ 20åã®ããŒã¯ãŒãã®ã³ãŒãè£å®ïŒ
char8_tãconstevalãããã³constinitãco_awaitãco_returnããšco_yieldã - æå®ãããåæååã®åºæ¬ã¯ã©ã¹ããã®ãã£ãŒã«ãã®å®äºïŒ

- ããã§ãæ§æã
explicit(bool)æ£ãã匷調衚瀺ãããååã®ãã³ããããã²ãŒã·ã§ã³ãããã³ãªãã¡ã¯ã¿ãªã³ã°ãæ©èœããŸãã

forã€ãã·ã£ã©ã€ã¶ã䜿çšããç¯å²ããŒã¹ã®ã«ãŒãã®å Žåãã«ãŒã倿°ã®åå倿Žãªãã¡ã¯ã¿ãªã³ã°ãæ©èœããŸããã
éçã³ãŒãã¢ãã©ã€ã¶ãŒ
ååã®ãªãªãŒã¹ã§ã¯ãæããéããåæã§ããããŒã¿ãããŒåæãClangdããŒã¹ã®ãšã³ãžã³ã«è»¢éããŸãããããã¯äž»ã«ããã©ãŒãã³ã¹ãåäžãããããã§ããããããããããããšã§ããããªãã¡ã¯ã¿ãªã³ã°äžã«ãå€ãã®åé¡ãäžæ£ç¢ºããèŠã€ãããŸããããã®ããããªãªãŒã¹2020.2ã§ã¯ããã®åæãæ¹åãããã°ãä¿®æ£ãç¶ããŸããã
- , , .
- DFA Simplify code Loop condition is never updated. , :
, :
- , . , Clang-Tidy (clang-tidy:bugprone-infinite-loop), - . CLion :

- CLion (dangling pointers)! (, ), :

- , Concepts C++20, -
auto, :

ãã®ãªãªãŒã¹ã§ã¯ãïŒæã ã®ãŠãŒã¶ãŒã®äžéšã§ãããšãããç¡é§ã ã£ãã¿ããªã®ãæ°ã«å ¥ãæ€æ»ãã¯ã¿ãŒã®æ¥œãããäœãã«ã¯ïŒãšãã£ã¿é åã®å³äžé ã«ããæ°ããæ€æ»ãŠã£ãžã§ããã«ãªã£ãŠããŸããããã§ãããã¯ã©ã€ãã¬ãã«ãèšå®ããããã®ãªãã·ã§ã³ã衚瀺ããïŒãã¹ãŠã®åé¡ã®è¡šç€ºããã³ãŒãã¢ãã©ã€ã¶ãŒã®å®å šãªç¡å¹åãŸã§ïŒãã¯ãªãã¯ãããšããã®ãã¡ã€ã«ã®éçåæçµæã®ãŠã£ã³ããŠãéããŸãã
ãŠããããã¹ã
ããã§ãã§ã«äœåºŠãèšåãããŠãã調æ»ã«ãããšãC ++éçºè ã®34ïŒ ã¯ãŠããããã¹ããäœæããŠããŸããããã®èŠè¿ãã«ã圌ãã¯ä»ã®æ¹æ³ã§ãã¹ããè¡ã£ãŠãããšç§ã¯ä¿¡ããããšæããŸããåé¡ã®äžéšã¯ãC ++ã«æšæºã®èšèšã¢ãã«ãŸãã¯æšæºã®äŸåé¢ä¿ãããŒãžã£ãŒããªãããšã§ããã€ãŸãããããžã§ã¯ãã«ãŠããããã¹ããã¬ãŒã ã¯ãŒã¯ã远å ããã®ã¯ç°¡åã§ã¯ãããŸããããããçŸåšãããããããããŒã®ã¿ã®ãã¬ãŒã ã¯ãŒã¯ãç¹ã«äººæ°ãé«ãŸã£ãŠããããããžã§ã¯ãã«ç°¡åã«æ¥ç¶ã§ããŸããããããŒãã¡ã€ã«ã远å ããŠãèªåã§ãã¹ããäœæããŠãã ãããç§ãã¡ã®åŽã§ã¯ãIDEã§å¯èœãªéãå€ãã®ãªãã·ã§ã³ããµããŒãããããšããŠããŸãããã®ãªãªãŒã¹ã§ã¯ãdoctestãGoogle TestãCatchãBoost.Testããã»ããã«è¿œå ãããŸãããã¡ãªã¿ã«ãå°ãåã«ã²ã¹ãããã°ãæçš¿ããŸããViktorããã®ãã¬ãŒã ã¯ãŒã¯ã®å©ç¹ã«ã€ããŠèªã£ãèè ããã
CLionã®ãµããŒãã«ã¯éåžžã®ãã®ãå«ãŸããŸãã
- èªåãã¹ãæ€åºã
- ãã¹ããå®è¡ããã³ãããã°ããããã®æ§æã®èªåäœæã
- ãã¹ãçµæã¯ãããŸããŸãªãã£ã«ã¿ãªã³ã°ãšé åºä»ãã®ãªãã·ã§ã³ãããã³ãã¹ããœãŒã¹ã³ãŒããžã®ã¯ã³ã¯ãªãã¯é·ç§»ãåããç¹å¥ãªçµã¿èŸŒã¿ãŠã£ã³ããŠã«åºåãããŸãã
- ãšãã£ã¿ãŒã®å·ŠåŽã®ãã€ã³ã«ããããã¹ããå®è¡ããæåŸã«å®è¡ããããã¹ãã®ã¹ããŒã¿ã¹ãèå¥ããããã®ã¢ã€ã³ã³ã
GoogleTestãšCatch2ã®ãµããŒããæŽæ°ãããŸããã
- Catch2ã®ãã³ãã¬ãŒããã¹ãã®ãµããŒãã远å ãããŸããã
- ãŸããGoogle Testã®å Žåããã¯ãã®ãµããŒã
GTEST_SKIP()ãããã¯ãç¹å®ã®ç°å¢ãªã©ã§äžéšã®ãã¹ããã¹ãããã§ããããã«ããå Žåã«éåžžã«åœ¹ç«ã¡ãŸãã
åŒè·å£«ïŒã¡ãªã¿ã«ãCatch / Catch2ãã¬ãŒã ã¯ãŒã¯ã®äœæè ïŒã«ãããŠããããã¹ããµããŒãã®æ¹åã«é¢ããç°¡åãªæŠèŠãããªïŒ
CTestã«é¢ãã質åãžã®èŠåïŒããã¯ãéåžžã®ããã¬ãŒã ã¯ãŒã¯ã§ã¯ãªãããã¹ãã®åœ¢åŒã§äœããå®è¡ããããã®äžå®ã¬ãã«ã®æœè±¡åã§ãããããå°ãé£ãããªããŸããããããç§ãã¡ã¯æ©ãã2020.3ã§ããã€ãã®çµ±åãèšç»ããŠããŸãïŒ
ãããŠ
æãè峿·±ããããããè°è«ããããæ®ãã«ã€ããŠç°¡åã«èª¬æããŸããããããå§ããã¹ãã§ããããCLion 2020.2ã«ã¯ããšãã£ã¿ãŒã®ããã©ãŒãã³ã¹ã«å¯Ÿããå€ãã®å°ãããªãããéèŠãªæ¹åãå«ãŸããŠããããšãã£ã¿ãŒã®ãã³ã°ãä¿®æ£ãããŠããŸããããšãã°ããã®ãããªæ¹åã®1ã€ã¯ã
Enter ãã¯ãå®çŸ©å
ã§æŒããããšãã«ããã¯ã¹ã©ãã·ã¥ãæ¿å
¥ããããšã§ããããã¯ç·šéè
ã®çç£æ§ã«åœ¹ç«ã€ããã«æãããŸããïŒå®éã®ãšãããæ°ããè¡ã¯çŸåšã®ãã¯ãã®å®çŸ©ã®äžéšã§ããå¯èœæ§ãé«ããããã¯ã¹ã©ãã·ã¥ãæ¿å
¥ããããšã§ã倧éã®ã³ãŒãã®äžå¿
èŠãªåè§£æãåé¿ã§ããããããšãã£ã¿ãŒã®è² æ
ã軜æžã§ããŸãã
ãã®äžïŒ
- PlatformIO â ,
platformio.iniCMake . - , IntelliJ . : GitHub Pull Requests Git WSL2 ( WSL2, CLion Git ).
- 2020.2ã®ãããã¬ãŒã«é¢ããŠã¯ãèšç»ãããå°ãªãææãäžããããšãã§ããŸãããåºæ¬çã«ããã¹ãŠã®å€§ããªã¿ã¹ã¯ã¯2020.3ã«ããã·ã¥ããã¯ãããŠããŸãïŒrootãšããŠãããã°ãã³ã¢ãã³ãããããã°ïŒããã ãããã®ããŒãžã§ã³ã§ã¯ãçŠæ¢ããŒãžã§ã³ã®GDBã9.2ã«ã¢ããã°ã¬ãŒãããGDBSTLããªãã£ããªã³ã¿ãŒãæŽæ°ããŸãããMicrosoft Visual C ++ããŒã«ãã§ãŒã³çšã®LLDBããŒã¹ã®ãããã¬ãŒã§ã¯ãæ©èœãããã©ãŒãã³ã¹ãå®å®æ§ã®äž¡æ¹ã§å€ãã®æ¹åãè¡ãããŸããã
ããã仿¥ã®ãã¹ãŠã§ããæåŸãŸã§èªãã ããšããããŸããïŒãæž èŽããããšãããããŸããïŒããã詊ããŠãã³ã¡ã³ãã«è³ªåãææ¡ãæåç¬ŠãæžããŠãã ãã-ç§ãã¡ã¯ãã€ã§ãããããèªãã§çããããšãå¬ããæããŸãïŒ
CLionããŒã
éçºãžã®ææ¬²