ä»æ¥ã¯ãããã°ã©ãã®ç¥èãçµéšã®ã¬ãã«ã«é¢ä¿ãªãããœãŒã¹ã³ãŒãåæããŒã«ã圹ç«ã€çç±ã«ã€ããŠã®ãããã¯ã«å°å¿µããããšæããŸãã ãããŠããã®ãããªåæã®å©ç¹ã¯ããã¹ãŠã®ããã°ã©ããŒã«ç¥ãããŠããããŒã«ã®äŸ-WinMergeã«ãã£ãŠå®èšŒãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®ãšã©ãŒãæ©ãæ€åºãããã»ã©ãä¿®æ£ã³ã¹ãã¯å®ããªããŸãã ç§ãã¡ã¯ãæãå®äŸ¡ã§ç°¡åãªãšã©ãŒãã³ãŒããæžãã®éçšã§æé€ããããšãã§ãããšçµè«ä»ããŠããŸãã ãšã©ãŒããªãå Žåã¯ãã£ãã®ããšãæžãããšã«ããŸãã ããã§ã¯å¯äžã®ç§ã¯ééããäœãããã®ã§ãã¡ããã©åœŒã®æããŽããããšã³ãŒããæ£ããæžã蟌ãŸããŠããŸãã ããããããã¯äžå¯èœã§ããããã ã¢ãããŒãã¯ãŸã åäœããŸããããšã©ãŒãªãã§èšè¿°ããå¿
èŠããããŸããã
æ¥ãã§ããªãéåžžã«çç·Žããããã°ã©ããŒã§ãããåçŽãªã¿ã€ããã¹ããã¢ã«ãŽãªãºã ã®è«çãšã©ãŒã§çµãããŸã§ããã¹ãç¯ããŸãã ããã§ã¯ãå€æ°ã®æ³åãæ©èœããŸãã ããã§ã¯ãç¹å®ã®ãifãã¹ããŒãã¡ã³ãããšã«ãšã©ãŒãäœæããããšã¯äžå¯èœãšæãããŸãã ãããŠåœŒã¯200åã®æ¯èŒãæžããŸããããäžåºŠã圌ã¯ééã£ãŠããŸããã ããã¯ãAndrey Urazovã«ããCodeFest 2010ã«ã³ãã¡ã¬ã³ã¹ã§ã®ã¬ããŒããQuality-Oriented Programmingãã§èå³æ·±ãããšã«èªãããŠã
ãŸã ïŒ
é³å£°èšé²ãåç
§ ïŒã æçã«èšãã°ãç§ã¯åœŒã®æ¬¡ã®èããè¿°ã¹ããã éçºè
ã®çµéšãã©ãã»ã©ã§ãã£ãŠããã³ãŒãã«ã¯ãšã©ãŒã衚瀺ãããŸãã ãããã®ééããæ¢ããããšã¯ã§ããŸããã ãããããããã®å€ãã§æ£åžžã«éåžžè¡ãããŠãããããã¯ããã«æ©ã段éã§æŠãããšãã§ããŸãã
éåžžããšã©ãŒã«å¯Ÿããé²è¡ã®éåžžã«æåã®ã¬ãã«ã¯ãæ°ãã«æžãããã³ãŒãã®ããã®ãŠããããã¹ããäœæããããšã§ãã ãã¹ãã¯ããã¹ãããã³ãŒãã®åã«èšè¿°ãããå ŽåããããŸãã ãã ãããŠããããã¹ãã«ã¯å€ãã®æ¬ ç¹ããããŸããããããã¯ããã°ã©ãã«ã¯æ¢ã«ç¥ãããŠããããã詳现ã«æ€èšããŸããã å€ãã®äºåçãªããŒã¿æºåãå¿
èŠãšããé¢æ°ã®åäœãã¹ããäœæããã®ã¯å¿
ãããç°¡åã§ã¯ãããŸããã ãããžã§ã¯ãã®èŠä»¶ãæ¥éã«å€åããŠããå Žåã¯ãŠããããã¹ããè² æ
ã«ãªã£ãŠããŸããã ãã¹ãã®äœæãšä¿å®ã«ã¯å€ãã®æéãããããŸãã ãã¹ãŠã®ãã©ã³ãããã¹ãããã®ã¯å¿
ãããç°¡åã§ã¯ãããŸããã ãŸããåäœãã¹ããååšãããèšç»ãããŠããªãã¢ããªã·ãã¯ãããžã§ã¯ããã®ãããšããŠååŸã§ããŸãã åäœãã¹ãã®å€§ããªå©ç¹ãåŠå®ããããšãªããããã¯è¯ãé²åŸ¡ã©ã€ã³ã§ããã倧å¹
ã«åŒ·åããããšãã§ããããããããã¹ãã ãšæããŸãã
éçã³ãŒã解æ - ããã°ã©ãã¯ãå€ãã®å Žåã§ãã£ãŠãã以åã®é²åŸ¡ã¬ãã«ãç¡èŠããŸãã å€ãã¯ãã³ã³ãã€ã©ã«ãã£ãŠçºè¡ããã蚺æèŠåã®ç¯å²ããéžè±ããããšãªãå¯èœã³ãŒãåæã䜿çšããŠããŸãã äžæ¹ãã³ãŒãã£ã³ã°æ®µéã§è«çãšã©ãŒãšåçŽãªã¿ã€ããã¹ã®ããªãã®å²åãèå¥ããããŒã«ã®ã¯ã©ã¹ããããŸãã ãããã®ããŒã«ã¯ãããã€ãã®ã³ãŒãã£ã³ã°ãã¿ãŒã³ã®ç¥èã«åºã¥ããŠé«ã¬ãã«ã®ã³ãŒãæ€èšŒãå®è¡ãããã¥ãŒãªã¹ãã£ãã¯ã¢ã«ãŽãªãºã ã䜿çšããæè»ãªæ§æã·ã¹ãã ãåããŠããŸãã
éç解æã§ã¯ãåœç¶ã®ããšãªãããããŸãã«ããæ¬ ç¹ããããŸãã 圌ã¯åã«å€ãã®çš®é¡ã®ãšã©ãŒãæ€åºããããšã¯ã§ããŸããã ã¢ãã©ã€ã¶ãŒã¯èª€æ€ç¥ãäžããã³ãŒãã«ãã®ãããªå€æŽãå ããããšã匷å¶ãããã®ã³ãŒããæ°ã«å
¥ã£ãŠå®å
šãšè©äŸ¡ããŸãã
ãããã倧ããªå©ç¹ããããŸãã åæã¯ããã®äœ¿çšé »åºŠã«é¢ä¿ãªããããã°ã©ã ã®ãã¹ãŠã®ãã©ã³ãã察象ãšããŠããŸãã åæã¯å®è¡ã¹ããŒãžã«äŸåããŸããã äžå®å
šãªã³ãŒãã§ããã§ãã¯ããæ©äŒããããŸãã ããªããç¶æ¿ãå€ãã®ã³ãŒãã確èªããããšãã§ããŸãã éçæ€èšŒã¯é«éã§ãããåçæ€èšŒããŒã«ãšã¯ç°ãªããæ¡åŒµæ§ã«åªããŠããŸãã
ãœãŒã¹ã³ãŒãã®éçåæã«ã€ããŠå€ãã®èšèãèšãããŸããã ãããç·Žç¿ã«éäžããŸãããã ç§ã¯C ++ã§æžãããã¢ããªã±ãŒã·ã§ã³ã1ã€åãããšããã€ãã®ãã°ãçºèŠããããšããã§ãããã
å°ãããŠæåãªãã®ãéžã³ããã£ãã ç§ã¯å€ãã®ããŒã«ã䜿çšããã[ã¹ã¿ãŒã]ã¡ãã¥ãŒã®ããã°ã©ã ã®ãªã¹ãããããã®ã§ãç§ã®éžæã¯WinMergeã«éå®ãããŠããŸããã WinMergeã¯
source ãå°èŠæš¡ïŒçŽ186,000è¡ïŒã§å©çšå¯èœã§ãã ããã°ã©ã ã¯ååãªå質ã§ãã ç§ã¯ãããå®ç§ã«äœ¿çšãããœãŒã¹ã³ãŒãã®25ïŒ
ãã³ã¡ã³ãã§å ããããŠããããšïŒè¯ãå
åïŒã«åºã¥ããŠè©±ããŠããŸãã äžè¬çã«ã¯ãæé©ãªéžæã
ææ°ã®å©çšå¯èœãªããŒãžã§ã³2.13.20ïŒ10/20/2010æ¥ä»ïŒãããŠã³ããŒããããŸããã åæã«ã¯ãéçºäžã®æ±çšã¢ãã©ã€ã¶ãŒã®ãããã¿ã€ãã䜿çšããŸããã ç§ã¯ãã®ããå°ãã§äœããŸãã
ä»éçã³ãŒãåæPVS-ã¹ã¿ãžãªã®äžéšã¯ãã«ãŒã«ã®äºçµãå«ã¿ãŸãã äžã€ã¯ãæ€åºããããã«èšèšãããŠ
64ãããã®æ¬ é¥ã ããããŠä»æ¹ãããããã«èšèšããã
OpenMPããã°ã©ã ããã§ã㯠ã çŸåšãäžè¬çãªã«ãŒã«ã®ã»ãããéçºããŠããŸãã ããŒã¿çããŸã å©çšã§ããŸããããäœãããã§ã«æ©èœããŠããã®ã§ãå°ãªããšãå°ãã®ãšã©ãŒãšã®æ¬åœã®æŠäºãæ¬åœã«æ¬²ããã§ãã ç§ãã¡ã¯ããã®èªå·±å®£äŒã«ã€ããŠæžãããªãã§ãã ãããèªç±ã®ããã®æ°ããã«ãŒã«ã®ã»ãããäœãããã«èšç»ããŠããŸãã PVS-Studio 4.00ã®äžéšãšããŠã1ã2ãæåŸã«æ°ããããŒã«ãå
¬éããŸãã
ããã§ãããã«30å以å
ã«WinMerge-2.13.20ã®ãœãŒã¹ã³ãŒãã§èŠã€ããèå³æ·±ãç¹ãããã€ã瀺ããŸãïŒ15åæ€èšŒã15åã§çµæã衚瀺ïŒã ä»ã«ãçãããå ŽæããããŸãããæ¬åœã«ééãããããã©ãããå€æããã®ã¯åªåã§ãã ä»ã§ã¯ã1ã€ã®ãããžã§ã¯ãã§ã§ããã ãå€ãã®æ¬ é¥ãèŠã€ããã®ã«åé¡ã¯ãããŸããã éç解æãããã«åœ¹ç«ã€ãã倧ãŸããªç 究ã§ããå€ãã®ãšã©ãŒãè¿
éã«ç¹å®ã§ããããšãåªé
ã«ç€ºããããšæããŸãã
æåã®äŸã ã¢ãã©ã€ã¶ãŒã¯ããV530-é¢æ° 'Foo'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãããšããããã€ãã®ãšã©ãŒãææããŸããã äžè¬çã«ããããã®èŠåã¯ãé¢æ°ã®èª€ã£ã䜿çšã«é¢é£ããŠè¡šç€ºãããŸãã ã³ãŒããèããŠã¿ãŸãããïŒ
/ **
* @briefæå®ããã¢ã€ãã ã®äž¡åŽã®ãã¡ã€ã«åãååŸããŸãã
ã¢ã€ãã ãç¹å¥ãªã¢ã€ãã ã§ããå Žå*空ã®æååãè¿ããŸã@Noteã
* /
void CDirView :: GetItemFileNamesïŒint selã
StringïŒstrLeftãStringïŒstrRightïŒconst
{
UINT_PTR diffpos = GetItemKeyïŒselïŒ;
ããïŒdiffpos ==ïŒUINT_PTRïŒSPECIAL_ITEM_POSïŒ
{
strLeft.emptyïŒïŒ;
strRight.emptyïŒïŒ;
}
ä»ã«
{
...
}
}
ãã®é¢æ°ã¯ãç¹å®ã®ç¶æ³ã§ã2è¡ã®ç©ºçœè¡ãè¿ãå¿
èŠããããŸãã ãã ããé倱ã«ãããstd :: string :: emptyïŒïŒé¢æ°ã¯std :: string :: clearïŒïŒã®ä»£ããã«åŒã³åºãããŸãã ããã¯ãå¶ç¶ã«ããèŠããã»ã©ãŸããªééãã§ã¯ãããŸããã ä»ã®å€ãã®ãããžã§ã¯ãã§åœŒå¥³ã«äŒã£ãã ãããå«ãããšã¯ãå¥ã®WinMergeé¢æ°ã«ãããŸãã
/ **
* @briefããªã¢ã³ãã®å€ãã¯ãªã¢ããŸãïŒããã©ã«ãã«ãªã»ããïŒã
* /
void VariantValue ::ã¯ãªã¢ïŒïŒ
{
m_vtype = VT_NULL;
m_bvalue = falseã¯ã
m_ivalue = 0;
m_fvalue = 0;
m_svalue.emptyïŒïŒ;
m_tvalue = 0;
}
ããã§ããäºæ³ãããè¡ã®ã¯ãªã¢ã¯çºçããŸããã
ãã ãããV501-'||'ã®å·Šå³ã«åãéšååŒãããããšããèŠå æŒç®å "ïŒ
BUFFERTYPE m_nBufferType [2];
...
//ååã®ãªããããã¡ãåŠçããŸã
ifïŒïŒm_nBufferType [nBuffer] == BUFFER_UNNAMEDïŒ||
ïŒm_nBufferType [nBuffer] == BUFFER_UNNAMEDïŒïŒ
nSaveErrorCode = SAVE_NO_FILENAMEã
è¿ãã®ã³ãŒããèŠããšãé¡æšãããšæ¬¡ã®ããã«ãªããŸãã
ïŒm_nBufferType [0] == BUFFER_UNNAMEDïŒ||
ïŒm_nBufferType [1] == BUFFER_UNNAMEDïŒ
ãããŠãããã§ãªãå Žåã«ã¯ããŸã ééãã®ããã€ãã®çš®é¡ããããŸãã
ããŸããŸãªç·æ¥äºæ
ãçºçããå ŽåãWinMergeã¯ãšã©ãŒã®å ±åãè©Šã¿ãŸãããå€ãã®å Žå倱æããŸãã ããã¯ãã¢ãã©ã€ã¶ãã³ãŒãã£ã³ã°ããæ¹æ³ã®è¯ãäŸã¯ãããã°ã©ã ã®ã»ãšãã©äœ¿çšãããªãéšåã«ä»»æã®ã¿ã€ãã®ãšã©ãŒãæ€åºããããšãã§ããæ¹æ³ã§ãã ã³ãŒãã«ã¯ããã€ãã®ãšã©ãŒããããPVS-Studioã¯æ¬¡ã®ããã«å ±åããŸãããV510-'Format'é¢æ°ã¯ãã¯ã©ã¹åå€æ°ã 'N'å®åŒæ°ãšããŠåãåãããšãæåŸ
ãããŠããŸãããã ã³ãŒãäŸïŒ
String GetSysErrorïŒint nerrïŒ;
...
CString msg;
msg.FormatïŒ
_TïŒãã¬ãžã¹ããªããŒHKCU /ïŒ
sãéããŸããã§ããïŒ\ n \ tïŒ
dïŒïŒ
sãïŒã
f_RegDirãretValãGetSysErrorïŒretValïŒïŒ;
äžèŠããã¹ãŠãæ£åžžã§ãã ããã¯ã¡ããã©Â«æåå»ã®ã¿ã€ãã§ã«ã®std :: wstringã®Â»ã®ãããªä»ã®ãã®ã§ã¯ãããŸããã ãããã£ãŠãæè¯ã®å Žåã¯æå³äžæãªãã®ãåºåããææªã®å Žåã¯ã¢ã¯ã»ã¹éåãšã©ãŒãçºçããŸãã 代ããã«ãã¹ã¿ãã¯å
ã®æååãžã®ãã€ã³ã¿ãã¿ã€ã«ã®std :: wstringã®Â»ã®ãªããžã§ã¯ããé
眮ããŠããŸãã ãã®ç¶æ³ã«ã€ããŠã¯ãã
Big Brother Helps You ããšããèšäºã§è©³ãã説æããŸããã æ£ããã³ãŒãã«ã¯c_strïŒïŒã®åŒã³åºããå«ãŸããŠããå¿
èŠããããŸãã
msg.FormatïŒ
_TïŒãã¬ãžã¹ããªããŒHKCU /ïŒ
sãéããŸããã§ããïŒ\ n \ tïŒ
dïŒïŒ
sãïŒã
f_RegDirãretValãGetSysErrorïŒretValïŒ.c_strïŒïŒïŒ;
ããã«é²ã¿ãŸãããã ããã¯éåžžã«çãããã³ãŒãã§ãã ããã«ééãããããã©ãããããããŸããã ãããããifãæŒç®åã®2ã€ã®ãã©ã³ãã«å®å
šã«åäžã®ã³ãŒããå«ãŸããŠããã®ã¯å¥åŠã§ãã ã¢ãã©ã€ã¶ãŒã¯ã蚺æã¡ãã»ãŒãžãV532-ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ããã§ãã®ç¶æ³ã«ã€ããŠèŠåããŸããã ããã§ã¯ãäžå¯©ãªã³ãŒãã¯æ¬¡ã®ãšããã§ãã
ifïŒæ倧<INT_MAXïŒ
{
ïŒI =å;ç§ã¯æ倧ã®<;ç§ã¯++ïŒã®ããã«
{
ifïŒeptr> = md-> end_subject ||
IS_NEWLINEïŒã»ãã¿ãŒïŒïŒ
äŒæ©;
eptr ++;
whileïŒeptr <md-> end_subject &&
ïŒ* eptrïŒ0xc0ïŒ== 0x80ïŒ
eptr ++;
}
}
ä»ã«
{
ïŒI =å;ç§ã¯æ倧ã®<;ç§ã¯++ïŒã®ããã«
{
ifïŒeptr> = md-> end_subject ||
IS_NEWLINEïŒã»ãã¿ãŒïŒïŒ
äŒæ©;
eptr ++;
whileïŒeptr <md-> end_subject &&
ïŒ* eptrïŒ0xc0ïŒ== 0x80ïŒ
eptr ++;
}
}
}
ããã«ãããã®ãæããŸãïŒãããã¯ããŸããæ£åœãªçç±ã§ããã
ããŠããã1ã€ã®äŸãšçµäºã§ãã ã¢ãã©ã€ã¶ãŒã¯ãçããããµã€ã¯ã«ãæ€åºããŸããããV534-ãforãæŒç®åå
ã§ééã£ãå€æ°ãæ¯èŒãããŠããå¯èœæ§ããããŸãã ãiãã®ã¬ãã¥ãŒãæ€èšããŠãã ããã
//ããã¹ããããã€ãã®ç¿»èš³ãããé
åã®é·ããååŸããŸãã
int Text2BinTranslator :: iLengthOfTransToBinïŒ
char * srcãint srclenïŒ
{
...
forïŒk = i; i <srclen; k ++ïŒ
{
ifïŒsrc [k] == '>'ïŒ
äŒæ©;
}
...
}
ãã®ã³ãŒãã¯ãã¢ã¯ã»ã¹éåã®åŸåããããŸãã ã«ãŒãã¯ãã>ãæåãèŠã€ãããããsrclenãæåã®é·ãã®æååãçµäºãããŸã§ç¶ç¶ããå¿
èŠããããŸãã æ¯èŒã®ããã«å€æ°ãiãã䜿çšãããã®ã¯å¶ç¶ã§ããããkãã§ã¯ãããŸããã ã>ãæåãèŠã€ãããªãå Žåã¯ããããããã¹ãŠãçµäºããŸãã
ãããã«
éç解æãå¿ããªãã§ãã ããã 圌ã¯ãè¯ãã³ãŒãã§ãé¢çœããã®ãèŠã€ããããšãã§ããŸãã ãŸããæºåãã§ããããåŸã§ç§ãã¡ã®
ãµã€ãã«æ»ã£ãŠç¡æã®æ±çšã¢ãã©ã€ã¶ãŒãè©ŠããŠãã ããã