2018ãè¿ã¥ããŠããã®ã§ãPVS-Studioéçã¢ãã©ã€ã¶ãŒã®éçºã®æ°ããæ¹åãèããæãæ¥ãŸããã ä»ãç§ãã¡ã«ãšã£ãŠæãèå³æ·±ãã®ã¯ãJavaèšèªã®ãµããŒãã§ãã ããã«ãIBM RPGèšèªã®ãµããŒããæ€èšããŠããŸãã æœåšçãªè匱æ§ãç¹å®ããæ¹åã§CãC ++ CïŒã³ãŒãã®åæãéçºããããšãåæ§ã«èå³æ·±ãããšã§ãã ãŸããmacOSãã©ãããã©ãŒã ã§ã®Cããã³C ++ã³ãŒãã®åæããµããŒãããæçµçã«Keilããã³IARã®ã³ã³ãã€ã©ãŒã®ãµããŒããå®äºããããšèããŠããŸãã MISRAæšæºããµããŒãããããšã¯ã§ããŸããã å€ãããªã¹ããããŠããã2018幎ã ãã§ã¯ååã§ã¯ãããŸããã ãããã£ãŠãèšç»ã«ã€ããŠè©±ãåããæãåªå 床ã®é«ãåéãéžæããŸãããã
æåã«ã PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã®æ¢ã«å®è£ ãããŠããæ©èœãæãåºãããŠãã ããã
- CãC ++ãC ++ / CLIãC ++ / CXãããã³CïŒããã°ã©ã ã®ã³ãŒãã«ãããåºç¯ãªãšã©ãŒããã³æœåšçãªè匱æ§ã®ç¹å®ã
- Visual Studio 2010-2017ãšã®äŸ¿å©ã§ç°¡åãªçµ±åã åã³ã³ãã€ã«åŸã®åã ã®ãã¡ã€ã«ã®èªååæãå¯èœã§ãã
- ã³ãã³ãã©ã€ã³ããå®è¡ããŠãœãªã¥ãŒã·ã§ã³å šäœã確èªããŸããPVS-Studioãå€éãã«ãã«çµ±åããŠãååäžã«å šå¡ãæ°ãããã°ãååŸã§ããããã«ããŸãã ãŸãã¯ãBlameNotifierãŠãŒãã£ãªãã£ã䜿çšããŠãå€éã®å®è¡äžã«PVS-Studioãæ€åºãããšã©ãŒã«ã€ããŠéçºè ã«æçŽãéä¿¡ã§ããŸãã
- åªããã¹ã±ãŒã©ããªãã£ã 䜿çšããã³ã¢ã®æ°ãã«ã¹ã¿ãã€ãºããŠããã«ãã³ã¢ããã³ãã«ãããã»ããµã·ã¹ãã ããµããŒãããŸãã IncrediBuildããµããŒãããŸãã
- PVS-StudioãŠã£ã³ããŠã§ã®åæçµæïŒãã°ïŒã®ã€ã³ã¿ã©ã¯ãã£ããã£ã«ã¿ãªã³ã°ïŒèšºæã³ãŒãããã¡ã€ã«åã蚺æããã¹ãã«åèªãå«ããã
- Linuxã§éçºããããããžã§ã¯ãã«çµ±åããããã®å€æ°ã®ãªãã·ã§ã³ã
- 誀ã£ãã¢ã©ãŒã ãšããŠããŒã¯-ãã¡ã€ã«ã®ç¹å®ã®ãã©ã°ã¡ã³ãã®ç¹å®ã®èšºæã§èªããªãããã«ã³ãŒãå ã®ããŒã¯ã¢ããã ç¹å¥ãªã¿ã€ãã®ã³ã¡ã³ãã䜿çšããŠããã¯ãã«é¢é£ããèŠåãæå¶ããããšãã§ããŸãã
- 倧éæå¶-å€ãã¡ãã»ãŒãžããã¹ãŠæå¶ã§ãããããã¢ãã©ã€ã¶ã¯0ã®éœæ§ãçæããŸãã åŸã§æå¶ãããã¡ãã»ãŒãžã«ãã€ã§ãæ»ãããšãã§ããŸãã PVS-Studioãæ¢åã®éçºããã»ã¹ã«ã·ãŒã ã¬ã¹ã«çµ±åããæ°ããã³ãŒãã§ã®ã¿ãšã©ãŒã«éäžããæ©èœã
- PVS-Studioã®æ°ããããŒãžã§ã³ãèªåçã«ç¢ºèªããŸãïŒIDEã§äœæ¥ããŠãããšããšãã€ããªãŒãã«ãäžã®äž¡æ¹ïŒã
- ã¬ããŒããå¥ã®ãã·ã³ã«è»¢éããã«ã¯ãã¬ããŒããã¡ã€ã«ã§çžå¯Ÿãã¹ã䜿çšããŸãã
- CLMonitoring-Visual Studioãã¡ã€ã«ïŒ.sln / .vcxprojïŒãæããªããããžã§ã¯ãããã§ãã¯ããŸãã çªç¶CLMonitoringæ©èœãååã«ãªãå Žåã¯ãPVS-StudioãMakefileããŒã¹ã®ãã«ãã·ã¹ãã ã«æåã§çµ±åã§ããŸãã Linuxçšã®åæ§ã®ãŠãŒãã£ãªãã£ã¯pvs-studio-analyzerãšåŒã°ããŸãã
- ååããã©ã«ããŒããŸãã¯ãã¹ã¯ã«ãã£ãŠåæãããã¡ã€ã«ãé€å€ããæ©èœã éå»Næ¥éã«å€æŽããããã¡ã€ã«ããã§ãã¯ããæ©èœã
- SonarQubeãšã®çµ±åã ããã¯ããœãŒã¹ã³ãŒãã®ç¶ç¶çãªå質管çã®ããã®ãªãŒãã³ãã©ãããã©ãŒã ã§ãã
- çãããŒãžã§ã³ãšãã«ããŒãžã§ã³ã®HTMLã¬ããŒãã ãã«ããŒãžã§ã³ã«ã¯ããã¡ã€ã«ã®ãœãŒã¹ã³ãŒããå«ãŸããŠããããã¡ã€ã«éã移åã§ããŸãã
ãµããŒããããŠããèšèªãšã³ã³ãã€ã©ïŒ
- çª Visual Studio 2017 CãC ++ãC ++ / CLIãC ++ / CXïŒWinRTïŒãCïŒ
- çª Visual Studio 2015 CãC ++ãC ++ / CLIãC ++ / CXïŒWinRTïŒãCïŒ
- çª Visual Studio 2013 CãC ++ãC ++ / CLIãC ++ / CXïŒWinRTïŒãCïŒ
- çª Visual Studio 2012 CãC ++ãC ++ / CLIãC ++ / CXïŒWinRTïŒãCïŒ
- çª Visual Studio 2010 CãC ++ãC ++ / CLIãCïŒ
- çª MinGW CãC ++
- Windows / Linux Clang CãC ++
- Linux GCC CãC ++
ãã§ã«ãããã®ãç°¡åã«ãªã¹ãããŸããã 詳现ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã 次ã«ãæ°ããããŒãžã§ã³ã§äœã衚瀺ãããããèŠãŠã¿ãŸãããã
æœåšçãªåŒ±ç¹ãCWE
PVS-Studioã¢ãã©ã€ã¶ãŒã¯ããã§ã«å€æ°ã®æœåšçãªè匱æ§ïŒåŒ±ç¹ïŒãæ€åºã§ããŸãã PVS-Studioã®ããŒãžã§ã³ããŸããªã衚瀺ãããã»ãšãã©ã®èŠåã¯CWEåé¡ã«åŸã£ãŠ1ã€ãŸãã¯å¥ã®èå¥åã«å¯Ÿå¿ããŸãã
å³N1ã CWEåãå«ãŸããŠããŸãã
ãã ããããã¯2017幎ã®çºä¿¡ã§è¡ãæåã®æ®µéã«éããŸããã æ¥å¹Žãæœåšçãªè匱æ§ã®æ€çŽ¢ã®å®è£ ã«é¢é£ããããèå³æ·±ãäœæ¥ãåŸ ã£ãŠããŸãã ãã®æ¹åã§ãCãC ++ãããã³CïŒã®ããã€ãã®ç¹å¥ãªèšºæãè¡ãäºå®ã§ãã äŸãšããŠãèšç»ãããŠãã蚺æã®1ã€ã«ã€ããŠèª¬æããŸãã
課é¡ãã©ãã«ãŒãã説æãããŸãã
ãŸãããä¿¡é Œæ§ã®äœãããŒã¿ãã®æŠå¿µãå°å ¥ããå¿ èŠããããŸãã ããã¯å€éšããã®ããŒã¿ã§ãã ä¿¡é Œã§ããªãããŒã¿ã®äŸïŒ
- freadé¢æ°ã䜿çšããŠèªã¿åããããããã¡ããŒã¿
- recvé¢æ°ã䜿çšããŠååŸãããããã¡ãŒå ã®ããŒã¿
- scanfïŒ "ïŒ s"ã...ïŒã§èªã¿åããããããã¡ãŒïŒè¡ïŒå ã®ããŒã¿
- fscanfã§èªã¿åãããæŽæ°å€æ°ïŒ "ïŒ i"ã...ïŒ
- freadã§èªã¿åãããæŽæ°å€æ°ïŒïŒintegerãsizeofïŒintïŒã1ãfileïŒ
- ã¹ããªãŒã ããèªã¿åãããæŽæ°å€æ°ïŒ wcin >> n;
- ä»ã®æ¹æ³ã§å€éšããååŸããæŽæ°å€æ°ïŒ n = GetFileSizeïŒhãxïŒ;
- GetServerVariable ã ReadClienté¢æ°ã䜿çšããŠæ å ±ãååŸããŸãïŒäžéšã®ãã£ãŒã«ãã¯EXTENSION_CONTROL_BLOCKæ§é äœããèªã¿åãããŸãïŒ
- ãªã©ãªã©
å€æ°/ãããã¡ã¯ãäœããã®å€ã®ãã§ãã¯ãå®è¡ããããŸã§ãä¿¡é Œã§ããªããœãŒã¹ãšèŠãªãããŸãã ããŒã¿ã®ä¿¡é Œæ§ãé«ãããã§ãã¯ã®äŸïŒããŒã¿ãæ€èšŒãããæ£ããïŒïŒ
- ifïŒn == 2ïŒ
- ifïŒstrcmpïŒs1ãs2ïŒ> 0ïŒ
- ifïŒstrchrïŒs1ã 'c'ïŒ== 0ïŒ
- ifïŒn> 1 && n <100ïŒ
泚1.åæã«ããã€ã³ã¿ãŒã®NULLã®ãã§ãã¯ã¯ãããŒã¿ã®æ€èšŒãšããŠã«ãŠã³ããããŸããã
char s[100]; scanf("%s", s); if (s) // . // . 's' - .
泚2.é åããã³æ§é çšã®ç¹å¥ãªããŒã¿ãããŒã¡ã«ããºã ãå¿ èŠã«ãªããŸãããããã¯PVS-Studioã§ã¯ãŸã å©çšã§ããŸããã å®éã«ã¯ãåã ã®èŠçŽ ããã§ãã¯ããŠãããããã¡/æ§é å šäœã®ä¿¡é Œæ§ã¯åäžããŸããã 説æïŒ
unsigned char B[2]; if (B[0] < 3) // , . // . // " // / ". if (B[0] < 3 && B[1] < 3) // . // .
æãé£ããã®ã¯ãé åå šäœã®ãããã®ãã§ãã¯ã«ã€ããŠèããããšã§ãã
int A[100]; ... for (i = 0; i < 100; ++i) if (A[i] < 10) // return;
PVS-Studioã誀ã£ãããŒã¿ã«ã€ããŠèªèãå§ãããããã®äœ¿çšãæ€åºãã蚺æãè¡ããŸãã ããã«ãããè匱æ§ãç¹å®ãããŸãã å€ãã®å®éã®è匱æ§ã¯ãåãå ¥ãããããã€ããäºåæ€èšŒãªãã§äœ¿çšããããšããäºå®ã«ãããã®ã§ãã 䜿çšäžã¯ãããšãã°æ¬¡ã®ãããªã¢ã¯ã·ã§ã³ãç解ãããŸãïŒ
- ifïŒpinter [unsafe_int] == 1ïŒ
- mallocïŒunsafe_int * sizeofïŒfloatïŒïŒ
- ptr + = unsafe_int;
- ifïŒA [unsafe_buffer [1]] == 1ïŒ
- memcpyïŒaãbãunsafe_buffer [i]ïŒ
- buffer_size = 1 + unsafe_int;
- printfïŒunsafe_bufferã1ã2ïŒ;
- sprintfïŒnormal_bugãunsafe_bufferã1ã2ïŒ;
- ãªã©
泚3. strncpyã_tcsncpy_sãªã©ã®é¢æ° ïŒ3ã€ã®åŒæ°ãæã€é¢æ°ããªã¢ã³ããæå³ããïŒã¯ãæåŸã«çµç«¯ãŒãã®ãªãæååã圢æã§ããŸãã ãã®ãããªæååã¯ããã«çµç«¯æååã®å ¥åãåŸ ã€å°æ¥ã®é¢æ°ã§ãããã«é©çšãããšãã芳ç¹ããã¯å®å šã§ã¯ãããŸããã ããšãã°ã strlené¢æ°ã«æž¡ãããšã¯ã§ããŸããã
Java
æ°ã¶æåãJavaã¢ãã©ã€ã¶ãŒã¯éãã«èœã¡çããŠéçºãããŸããã æ®å¿µãªãããããã¯ããã¯ã°ã©ãŠã³ãã§çºçããŸããããã¹ãŠã«ååãªåŒ·åºŠããªãããã§ãã ãã®åãçµã¿ã«ã€ããŠè©±ãã®ã¯ææå°æ©ã§ãã ããŒã¿ãããŒåæã§ã¯ãC ++ã¢ãã©ã€ã¶ãŒã³ã¢ã«å®è£ ãããŠãããã¹ããã©ã¯ãã£ã¹ã䜿çšããããšã®ã¿ãèšç»ããŠããããšã«æ³šæããŠãã ããã
Javaã¢ãã©ã€ã¶ãŒã¯ãJava Native InterfaceïŒJNIïŒã䜿çšããŠC ++ã«ãŒãã«ãšå¯Ÿè©±ããŸãã é¢æ°ã®ã©ãããŒãçæããã«ã¯ãSWIGïŒSimplified Wrapper and Interface GeneratorïŒã䜿çšãããŸãã ããã«ãããC ++ã¢ãã©ã€ã¶ãŒã®æ©èœãåå©çšã§ããããã©ãŒãã³ã¹ãåäžããŸãã
é¢å¿ãé«ããããã«ãPVS-StudioãJavaã³ãŒãã§ãã§ã«æ€åºã§ãããšã©ãŒãããã€ã瀺ããŸãã
JMonkeyEngineãããžã§ã¯ãã PVS-StudioèŠåïŒV6004ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã VRMouseManager.java:139ã147
if( environment.isInVR() == false ){ Texture tex = environment.getApplication(). getAssetManager().loadTexture(texture); mouseImage.setTexture( environment.getApplication().getAssetManager(), (Texture2D)tex, true); ySize = tex.getImage().getHeight(); mouseImage.setHeight(ySize); mouseImage.setWidth(tex.getImage().getWidth()); mouseImage.getMaterial().getAdditionalRenderState(). setBlendMode(BlendMode.Alpha); mouseImage.getMaterial().getAdditionalRenderState(). setDepthWrite(false); } else { Texture tex = environment.getApplication(). getAssetManager().loadTexture(texture); mouseImage.setTexture( environment.getApplication().getAssetManager(), (Texture2D)tex, true); ySize = tex.getImage().getHeight(); mouseImage.setHeight(ySize); mouseImage.setWidth(tex.getImage().getWidth()); mouseImage.getMaterial().getAdditionalRenderState(). setBlendMode(BlendMode.Alpha); mouseImage.getMaterial().getAdditionalRenderState(). setDepthWrite(false); }
äžèšã®ã³ãŒãã§ã¯ã thenãããã¯ãšelseãããã¯ã¯åãã§ãã ã³ãŒãã®ãšã©ãŒããã§ãã¯ããããéè€ãåé€ãã䟡å€ããããŸãã
RxJavaãããžã§ã¯ãã PVS-StudioèŠåïŒV6022åŒ 'idx3> 0'ã¯åžžã«trueã§ãã JavadocWording.java:865
if (idx1 > 0 && idx2 > 0 && (idx3 < 0 || (idx2 < idx3 && idx3 > 0))) { .... }
ããããå®éã®ãšã©ãŒã¯ãããŸãããã idx3> 0ã®ãã§ãã¯ã¯åé·ã§ãã idx2> 0ããã³idx2 <idx3ã§ããããã idx3ã¯åžžã«ãŒããã倧ãããªããŸãã
IBM RPG
誰ãã©ããªèšèªãªã®ããç¥ã£ãŠããããã§ã¯ãªãã®ã§ãç°¡åãªèª¬æããå§ããŸãããã
IBM RPGïŒã¬ããŒãããã°ã©ã ãžã§ãã¬ãŒã¿ãŒïŒã¯ãå ã IBMã¡ã«ãã«ã«ã¿ãã®ã³ãã³ãèšèªã«æ§æã䌌ãŠããããã°ã©ãã³ã°èšèªã§ãã ãããã®ã¿ãã«ãµãŒãã¹ãæäŸãããšã³ãžãã¢ã®æ°ãããã¯ãããžãŒãšããŒã¿è»¢éãžã®ç§»è¡ãä¿é²ããããã«èšèšãããŸããã ããšããšIBM 1401çšã«å®è£ ãããŸããã1960幎代ãš1970幎代ã«åºã䜿çšãããŸããã
å³2. IBM1401ãKenRoss ãšPaul Laughtonã«ããIBM 1401ã®ãã¢ãåç §ããŠãã ããã
IBMã¯ãä»ã®ããã°ã©ãã³ã°èšèªãžã®ç¿»èš³ã«ã¯äžå©ãªå€§éã®ã³ãŒããèšè¿°ããŠãããããçŸåšãåŒãç¶ããã®èšèªããµããŒãããŠããŸãã
2001幎ã«ãªãªãŒã¹ãããRPG IVã®ããŒãžã§ã³ã§ã¯ããªããžã§ã¯ãããã°ã©ãã³ã°ã®èŠçŽ ãå°å ¥ãããŸããã
ãµãŒãããŒãã£ã®Visual RPGã³ã³ãã€ã©ã¯ãWindowsããã³GUIãµããŒããæäŸããŸãã ãŸããOpenVMSããã³ãã®ä»ã®ãããšããŸããã¯ãªãã©ãããã©ãŒã ã®å®è£ ããããŸãã
ãŠã£ãããã£ã¢ã§èšèªã«ã€ããŠè©³ããèªãïŒ IBM RPG ã ããã«ããã®èšèªã«é¢ããã¬ãã¥ãŒèšäºãè¿æ¥äžã«æžãäºå®ã§ãã
次ã«ããã®èšèªã«æ³šæãæã£ãçç±ã説æããå¿ èŠããããŸãã
RPGã®éçã³ãŒãåæã«é¢å¿ã®ããäŒç€Ÿããé£çµ¡ããããŸããã ãããã£ãŠãç§ãã¡ã¯ãã®èšèªãæ€èšããããšã«ããèå³ãæã¡ãŸããã ç§ãã¡ãç解ããŠããããã«ãå€ãã®ã³ãŒãããµããŒããããæ°ãããã©ã°ã¡ã³ãã«è¿œå ãããå¿ èŠããããã®èšèªã§æžãããŠããŸãã åæã«ããã®èšèªã«ç²ŸéããŠããå°é家ã¯éåžžã«å°ãªãããããã®å質ãšæ£ç¢ºããå¶åŸ¡ããè¿œå ã®æ¹æ³ãèããŠããŸãã ãã®ããšãããéçã³ãŒãåæã®å¯èœæ§ã«é¢å¿ããããŸãã
CobolãAdaãªã©ã®èšèªçšã®ã¢ãã©ã€ã¶ãŒãäžçäžã«åºçŸããéçºããç¶ããŠããã®ã§ãRPGçšã®ã¢ãã©ã€ã¶ãŒãäœæããŠã¿ãŸãããã ããã«ããã®èšèªã¯ã³ãŒãã¢ãã©ã€ã¶ãŒã®èŠ³ç¹ããããŸã ã«å¥ªãããŠããŸãã ããšãã°ã SonarRPGã¢ãã©ã€ã¶ãŒããããŸããããšã©ãŒãæ€åºããããã®èšºæã¯8ã€ããå®è£ ãããŠããŸããã ããã¯æããã«ååã§ã¯ãããŸããã å®éã®ãšã©ãŒãšã¿ã€ããã¹ãç¹å®ããããã«ããŠãŒã¶ãŒã«ãã£ãšèå³æ·±ã蚺æãæäŸã§ãããšç¢ºä¿¡ããŠããŸãã
IBM RPGçšã®ã¢ãã©ã€ã¶ãŒã®äœæãæ¥ãããšã¯ãããŸããããæœåšçãªé¡§å®¢ãæ€çŽ¢ããããã«ãã®ãããã¯ãè¡šæããããšã«ããŸããã çµç¹ãIBM RPGãæ±ã£ãŠããå Žåãåãã§RPGã¢ãã©ã€ã¶ãŒã®éçºã®èŠéãã«ã€ããŠãæèŠããèãããã ããã
RPGèšèªã«æ¬åœã«é¢å¿ãããããšãããã£ããã2018幎ã«ãã®æ¹åã§äœæ¥ãéå§ããŸãã
ã泚æ IBM RPGã¢ãã©ã€ã¶ãŒïŒããå ŽåïŒã¯ãåå¥ã«é éãããç¹å¥ãªäŸ¡æ Œã§æäŸãããŸãïŒãŽã£ã³ããŒãžã¯ããé«äŸ¡ã§ã:)ã
å³N3ã è³Œå ¥ããRPGæ¬ã ããããèªãããŒããŒãèŠã€ããããšã¯æ®ã£ãŠããŸãã
macOS
ã¢ãã©ã€ã¶ãŒã®macOSããŒãžã§ã³ã®å è¡äºçŽãšã©ã€ã»ã³ã¹ãæäŸããŠããŸãã
macOSããŒãžã§ã³ã¯çŸåšæºåãã§ããŠããŸããããäœæããã®ã«è€éãªããšã¯ãããŸããã ããªãã¯ãããåãåã£ãŠäœãã ãã§ãã ãã®åé¡ãé¢é£ããããã«ãªã£ãããæ°ãæ以å ã«macOSã«PVS-Studioãé©å¿ããããšæããŸãã å¥ã®ããšã¯ãç§ãã¡ããããæ¥ãã§ããªãéã§ãã ãããä»ãããåªå 床ãé«ããã©ããã¯ããããŸããã
ãããã£ãŠãããã°ã©ãã³ã°ã³ãã¥ããã£ããã®å®çšçãªé¢å¿ã確ä¿ããããã«ãããã€ãã®ã©ã€ã»ã³ã¹ã販売ãããŠããã ããŸãã
ç§ãã¡ã«ãšã£ãŠéèŠãªã®ã¯å®éçãªé¢å¿ã§ãããæœè±¡çãªé¢å¿ããééããã 倱æããCppCat補åãäœæããŸãã :)ã ãã®ãããªéã¡ãç¹°ãè¿ããªãããã«ããããšæããŸãã
æºåãããŠããªãPVS-Studioãè³Œå ¥ããããšã§é¡§å®¢ãåããå©ç¹ïŒ
- 幎éã©ã€ã»ã³ã¹ã®äŸ¡æ Œã§ãPVS-Studioã2幎é䜿çšã§ããŸãã
- ãã«ãã·ã¹ãã ãšç°å¢å°çšã®çµ±åãåŸãããŸãã
ã±ãŒã«ãIAR
KeilãšIARã¯ãçµã¿èŸŒã¿ã·ã¹ãã çšã®ã³ã³ãã€ã©ãéçºããŠããŸãã æã ã圌ãã¯åœŒãã®ãµããŒããå®çŸããããã®ææ¡ãç§ãã¡ã«æžããŠããŸãã é害ã¯ãªããäœæ¥ã®äžéšã¯ãã§ã«å®äºããŠããŸãã æ®å¿µãªããããããæãèµ·ãããŠãã¹ãããã®ã«ååãªãªãœãŒã¹ããããŸããã 2018幎ã«KeilãšIARã®æéãèŠã€ããããããšãé¡ã£ãŠããŸãã
ãã¹ã©
æè¿ãŸã§ãMISRAèŠæ Œã§ã¯ãæ€åºã§ãããšã©ãŒã®æ°ãšãã芳ç¹ããéåžžã«çãèŠãŠããŸããã ããã¯ééã£ãã¢ãããŒãã§ãã MISRAãªã©ã®æšæºã®ãã€ã³ãã¯ããããžã§ã¯ãã§ã§ããã ãå€ãã®ãšã©ãŒãæ€åºããªãããšã§ãã ãã®æå³ã¯ãã³ãŒãã®å質ãããã«å¶åŸ¡ããæœåšçã«å±éºãªèšèªæ§é ã®äœ¿çšã«å¯ŸããŠããã°ã©ããŒã«èŠåããããšã§ãã
ããšãã°ãMISRAã«ãŒã«ã®1ã€ã¯ã gotoæŒç®åã®äœ¿çšãçŠæ¢ããŠããŸãã ãã®ãããªã«ãŒã«ããå€ããŠå€§èŠæš¡ã§ãåæã«ååšãããããžã§ã¯ãã«é©çšããããšãããšããã®ãããªã³ãŒãæ€èšŒãã倱æããå¯èœæ§ããããŸãã ã»ãšãã©ééããªãããšã©ãŒã¯ãããŸãããã gotoãåãé€ãããã«å€æ°ã®ã¢ã«ãŽãªãºã ãæžãæããå¿ èŠããããŸãã ããã¯ãã³ãŒããªãã¡ã¯ã¿ãªã³ã°ã®ããã»ã¹ã§èª€ã£ãŠãšã©ãŒãå°å ¥ããããšã«ãããåŸãããã害ãåãŒãå¯èœæ§ããããŸãã
MISRAæšæºã®äœ¿çšæ¹æ³ã¯ç°ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãæšæºã§èŠå®ãããŠããèŠåãèæ ®ããŠããã«äœæããå¿ èŠããããŸãã æ¯Figçã«èšãã°ãMISRAã¯æ¢åã®gotoãåŠçããæ¹æ³ã§ã¯ãªããã³ãŒããèšè¿°ãããšãã«ãããã®gotoã䜿çšãããªãããã«ããæ¹æ³ã§ãã
MISRAèŠæ Œã«å¯Ÿãã姿å¢ãæ¹å®ãããããæ¬åœã«å¿ èŠã§ããããšãç解ããŸããããã倧èŠæš¡ãªãããžã§ã¯ããå®æœããPVS-Studioãèµ·åãããšã©ãŒãæ€åºããŸããããšããã¢ãã«ã«ã¯é©åããŸããã æœåšçãªã客æ§ã¯ãMISRAãåæã«äœ¿çšããã¿ã€ããã¹ãèŠã€ããããšèããŠããŸããããã¯PVS-Studioãå®å šã«æããã«ããŠããŸãã
ç§ãã¡ã¯ã客æ§ã«äŒããPVS-Studioã§MISRA Cããã³MISRA C ++æšæºã®ãµããŒãã«åãçµã¿å§ããŸããã ããã©ã«ãã§ã¯ãMISRAã¢ã©ãŒãã¯ç¡å¹ã«ãªã£ãŠããŸãã ãã³ã¡ã³ãã䜿çšã§ããŸãã/ * * /ã䜿çšããå¿ èŠããããŸãããªã©ã®ã¡ãã»ãŒãžã§ã¬ããŒããŠã£ã³ããŠãè©°ãŸãããããããŸããã ãã ããMISRA蚺æãããã¯ãã€ã§ããªã³ã«ããŠãå®æçã«äœ¿çšãéå§ã§ããŸãã
ãããã«
ã芧ã®ãšããã2018幎ã«ã¯å€ãã®èšç»ããããŸãã ãã®èšäºã¯ãæ°ããæœåšçãªãŠãŒã¶ãŒãšã®è°è«ãéå§ãã圌ããããèå³ãæã£ãŠãããã®ãèŠã€ããããã®å£å®ãšããŠæžãããŠããŸãã ç©æ¥µçã«æŽ»åããæèŠãè¡šæããŠæèŠãæžããŠãã ããã ã©ã€ã»ã³ã¹ã®äºå泚æã¯ç¹ã«è¯ãèšèã§ã:)ã
2018幎ã®æ°å¹Žã«ãæåŸ ããã ããããããšãããããŸãïŒ