
ã²ãŒã ãããããã«å€ãããã©ããèŠãŠã¿ãŸãããã
ã€ã³ã¹ããŒã«äžã«ããã«æ°ã«å ¥ããªãæåã®ããšã¯ãVisual Studio 2005 \ 2008ãšã®çµ±åã®æ¬ åŠã§ãã ããããå€ãããŒãžã§ã³ã®ã¹ã¿ãžãªã«ã¯æ¡åŒµçšã®å®å šã«ç°ãªãAPIããããããããµããŒãããããã«è¿œå ã®åªåãå¿ èŠãªå Žåãããããšãç解ããŠããŸãããC ++ã¯ãŸã£ããè¥ãèšèªã§ã¯ãªããç§ãééãããããžã§ã¯ãã®å€ãã¯ãŸã VS2008ã«äœãã§ããŠèª°ãããŸããååæããšã«çŽ12è¡ãç·šéããå¿ èŠãããå Žåã移è¡ããäºå®ã¯ãããŸããã ã¬ã¬ã·ãŒã䜿çšããã«ã¯ããŸã æ¬æ ŒçãªPVS-Studioãå¿ èŠã§ãã 倧äžå€«ã
Visual Studioãšã®çµ±åã«ãããããããªãºã ã¯ã次ã®ç¹ã«æºè¶³ããŠããŸãã2ã€ã®ãã€ã³ãã®ã¡ãã¥ãŒã1ã€ã®ããŒã«ããŒ-ãã以äžã ããã«ãæã«è§£æãæå¹ã«ãããDAWã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ãªãã§ïŒ ç§ã¯ãåãã«ãã®é床ãèœãšãã®ã§ã¯ãªããããšãã°ãªããžããªã«ã³ãããããåã«ãããžã§ã¯ãå šäœãåæããæ¹ãè«ççã«æããŸãã svn \ gitã¯ã©ã€ã¢ã³ãã®pre-commitããã¯ã«ã€ããŠãéçã¢ãã©ã€ã¶ãŒã䜿çšããŠæ°ããã³ãŒãããã§ãã¯ããããšããå§ãããŸãã
ãã¹ãã®å®¢èŠ³æ§ã®ããã«ã3ã€ã®ãããžã§ã¯ããéžæããŸããã
- Notepad ++ ïŒããã¯æªãã³ãŒãã ãšæã ïŒ
- ZeroMQ ïŒããã¯è¯ããµã³ãã«ã³ãŒãã ãšæããŸãïŒ
- ç§ã®æã®äœæ¥ãããžã§ã¯ãã®1ã€-ç§ã¯äœå¹Žãåã«æžããŸãããã確ãã«å€ãã®æããªééãããããŸã
Notepad ++ãšZeroMQãéžæãããã®ã¯ãäž¡æ¹ã®éçºã®çµéšãã»ãšãã©ãªãã£ãããã§ã-æåéãããã¡ãã¡ã®ããã€ãã®ãããããã§ãããå°ãªããšãã³ã³ãã€ã«ãšãã§ãã¯ã®æ¹æ³ãç解ããå¿ èŠã¯ãããŸããã§ããïŒVS2010ã§ãã«ãããå¯èœæ§ã«ã€ããŠã¯ç¢ºä¿¡ããŠããŸããïŒã
ã¡ã¢åž³++
ãããžã§ã¯ãå ã®86ãã¡ã€ã«ããã«ã¹ãã£ã³ã®å Žåã¯2åã CppCatããã®çãããã³ãŒãã«é¢ãã48ã¡ãã»ãŒãžïŒãã¡ã€ã«ãããå¹³å0.55ã¡ãã»ãŒãžïŒ
ããããééãã¯ããã€ãã転éããããšãããšãã«ãè«ççãªãandããšãããåäœã®ãandããæ··åãããããšã§ãã
ToAscii(wParam,(lParam >> 16) && 0xff,keys,&dwReturnedValue,0); // V560. A part of conditional expression is always true/false.
è² ã®åãã§ãã¯
WPARAM wParam ... if(wParam<0) // V547. Expression is always true/false.
ã€ã³ããã¯ã¹ã-1ãã®é
åã»ã«ã®æœåšçãªã¢ãã¬ã¹æå®
ãããééãã§ããããšã¯ãŸã£ããäºå®ã§ã¯ãããŸããããã®åã«ç©ºã®è¡ããã§ãã¯ãããå¯èœæ§ã¯ãããŸãããã±ãŒã¹ãæåŸ ããªãæ¹ãè¯ããšæãããŸãã
j=lstrlen(BGHS[SelfIndex].editstring); BGHS[SelfIndex].editstring[j-1]=0x00; // V557. Array overrun is possible.
ãããééãã§ããããšã¯ãŸã£ããäºå®ã§ã¯ãããŸããããã®åã«ç©ºã®è¡ããã§ãã¯ãããå¯èœæ§ã¯ãããŸãããã±ãŒã¹ãæåŸ ããªãæ¹ãè¯ããšæãããŸãã
äºéå²ãåœãŠã äžã€ã®ããšã¯æããã«äœåã§ãã
lpcs = &cs; lpcs = (LPCREATESTRUCT)lParam; // V519. The 'x' variable is assigned values twice successively. Perhaps this is a mistake.
建ç¯æ¡ä»¶ã®ãã³ã»ã³ã¹ã
if(MATCH) { return returnvalue+MAX_GRIDS; } if(!MATCH)) // V560. A part of conditional expression is always true/false. { return -1; }
æ£ããå²ãåœãŠãããã¡ã¢ãªã®èª€ã£ããã§ãã¯
ç§ã®å人çãªçµ±èšã«ãããšãããã¯C ++ã³ãŒãã§æãããããééãã§ãïŒãã®ãããžã§ã¯ãã§ã¯24åçºçããŸãïŒã Cããã®ã¡ã¢ãªå²ãåœãŠé¢æ°ã«ã«ãŒããããããšã©ãŒæã«NULLãè¿ããŸããã ããããC ++ã§newæŒç®åã䜿çšããŠã䜿çšå¯èœãªã¡ã¢ãªãäžè¶³ããŠããŸããïŒããã§ãã¯ããå Žåãstd :: bad_allocäŸå€ããã£ããããNULLã®çµæããã§ãã¯ããå¿ èŠã¯ãããŸããã
char *source = new char[docLength]; if (source == NULL) // V668. There is no sense in testing the pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. return;
ç§ã®å人çãªçµ±èšã«ãããšãããã¯C ++ã³ãŒãã§æãããããééãã§ãïŒãã®ãããžã§ã¯ãã§ã¯24åçºçããŸãïŒã Cããã®ã¡ã¢ãªå²ãåœãŠé¢æ°ã«ã«ãŒããããããšã©ãŒæã«NULLãè¿ããŸããã ããããC ++ã§newæŒç®åã䜿çšããŠã䜿çšå¯èœãªã¡ã¢ãªãäžè¶³ããŠããŸããïŒããã§ãã¯ããå Žåãstd :: bad_allocäŸå€ããã£ããããNULLã®çµæããã§ãã¯ããå¿ èŠã¯ãããŸããã
éå°ãªåŠæ³
ããã°ã©ã å ã§ãããŒã«ã«ã§å®£èšããã5æåã®é åãžã®ãã€ã³ã¿ãŒãNULLã«ãªã£ãå Žåãäœããã²ã©ãèœã¡ãã®ã§ããã èœã¡ãã»ããè¯ãã§ãããã
TCHAR intStr[5]; ... if (!intStr) // V600. Consider inspecting the condition. The 'Foo' pointer is always not equal to NULL.
ããã°ã©ã å ã§ãããŒã«ã«ã§å®£èšããã5æåã®é åãžã®ãã€ã³ã¿ãŒãNULLã«ãªã£ãå Žåãäœããã²ã©ãèœã¡ãã®ã§ããã èœã¡ãã»ããè¯ãã§ãããã
åãç¶æ
ã®ããã«ãã§ãã¯
ããã§ã圌ãã¯åŒçšç¬ŠïŒããã«ãšã·ã³ã°ã«ïŒãèŠã€ããããšããŸããããå®éã«ã¯ããã«ãã§ãã¯ãããããã«ã§ãã 2çªç®ã®ãã§ãã¯ãããã»ã¹ã§å¿ããŠããSCE_H_SINGLESTRINGã«çœ®ãæããèšç»ãã³ããŒããŠè²Œãä»ããŸãã èŠã€ãã£ãæãæçšãªãã°ã®1ã€ã¯ãå®éã«ã¯XMLããŒãµãŒã®ãã°ã§ãããåãªããæ¹åã¢ããã€ã¹ãã§ã¯ãããŸããã
do { ... } while(openFound.success && (styleAt == SCE_H_DOUBLESTRING || styleAt == SCE_H_DOUBLESTRING) && searchStartPoint > 0);
ããã§ã圌ãã¯åŒçšç¬ŠïŒããã«ãšã·ã³ã°ã«ïŒãèŠã€ããããšããŸããããå®éã«ã¯ããã«ãã§ãã¯ãããããã«ã§ãã 2çªç®ã®ãã§ãã¯ãããã»ã¹ã§å¿ããŠããSCE_H_SINGLESTRINGã«çœ®ãæããèšç»ãã³ããŒããŠè²Œãä»ããŸãã èŠã€ãã£ãæãæçšãªãã°ã®1ã€ã¯ãå®éã«ã¯XMLããŒãµãŒã®ãã°ã§ãããåãªããæ¹åã¢ããã€ã¹ãã§ã¯ãããŸããã
ééã£ãïŒç§ã®æèŠã§ã¯ïŒå¿ç
åãæ¡ä»¶ã®2ã€ã®é£ç¶ããifãããã¯
//Setup GUI if (!_beforeSpecialView.isPostIt) // V581. The conditional expressions of the 'if' operators situated alongside each other are identical. { ... } //Set old style if not fullscreen if (!_beforeSpecialView.isPostIt) { ... }
ããã§ç§ã¯CppCatã«åæããŸããã ããã°ã©ãããã®ããã«æžãããšã«ããçç±ã誰ãç¥ã£ãŠããŸããïŒ ã³ãŒãã¯æå¹ã§ãããŸãæ©èœããŠããŸãã ãåé€ããã®ãå¿ããïŒããšããééãã¯ããåŸãŸãããããã§ãªããã°ãããã®ä»ããããããã§ãã ãŸãã«ãã®ãããªèšèšã³ãŒãã
ããã€ãã®ãšã©ãŒãã&&ãæäœã®åªå 床ã¯ã||ãã®åªå 床ãããé«ã æäœÂ»
printPage = (!(_pdlg.Flags & PD_PAGENUMS) || (pageNum >= _pdlg.nFromPage) && (pageNum <= _pdlg.nToPage));
CppCatã¯ãããã°ã©ãã¯æäœã®åªå é äœãç¥ããªããšåºãä¿¡ããŠããŸãã ãã®å Žåãæå³ãšãã€ãããŒã·ã§ã³ã®äž¡æ¹ã§ãããã°ã©ããŒãèªåãäœãããŠããããç¥ã£ãŠããããšã¯æããã§ãã ãã¡ããããæ瀺çã¯æé»çãããåªããŠããŸãããããšã©ãŒã¯ãããŸããã
ã¢ãã©ã€ã¶ãŒã¯ãä»ã®ã³ã³ãã€ã«ããŒã§ã¯æå³ã®ãªãã³ãŒããæå³ããªããšã¯æ³å®ããŠããŸããã
if (unicodeSupported) ::DispatchMessageW(&msg); else // V523. The 'then' statement is equivalent to the 'else' statement ::DispatchMessage(&msg);
ããã¯ããïŒdefine DispatchMessage DispatchMessageWãã以åã«èšè¿°ãããããã§ãã ããããããã«ãããŸã-ãã®çœ®æã¯æ¡ä»¶ä»ãã³ã³ãã€ã«ãã¯ãã«ãã£ãŠæå¹ã«ãªããŸãã ãã®å Žåãã³ãŒãã¯å®éã«ã¯æå³ããããŸããããä»ã®ããŒã䜿çšããŠãããžã§ã¯ããã³ã³ãã€ã«ãããšãDispatchMessageã¯DispatchMessageAãæããŸããããã¯ã³ãŒããæå³ããªãããšãæå³ããŸãã
ãã¡ãããæ¬ ç¹ããããŸãããä»ã«ã©ã®ãããªã³ã³ãã€ã«ãªãã·ã§ã³ãããã®ãââããæšæž¬ããããã«éçã¢ãã©ã€ã¶ãŒãèŠæ±ããã®ã¯äžå ¬å¹³ã§ãã ããããããã«ã€ããŠèããããã°ã©ãããã¯å®³ã¯ãããŸããã
ã¡ã¢åž³++åºå
ç§ã®æèŠã§ã¯ã48ã®ãšã©ãŒã¡ãã»ãŒãžã®ãã¡ãçŽ38ã泚æãšã³ãŒãã®äžéšã®å€æŽã«æ¬åœã«å€ããŸãã ãããã®ãã¡ã30ç®æã¯æãããªãã°ã§ããã8ç®æã¯äŸ¿å©ã§ããããªãã·ã§ã³ã®ã¹ã¿ã€ã«å€æŽã§ãã ã³ãŒãããžãã¯ã®ã³ã³ããã¹ãã§ã¯ãCppCatããã®10件ã®æçš¿ãfalseãšèŠãªããŸãã å šäœçã«-æªããªãã
ZeroMq
72ãã¡ã€ã«ã1åéã®åæã
çãããå Žæã1ã€ã ãèŠã€ãããŸããã ãããŠãããã¯å®éã«ã¯ééã£ãŠããŸãã
rc = pipe_->write (&probe_msg_); // zmq_assert (rc) is not applicable here, since it is not a bug. pipe_->flush (); rc = probe_msg_.close (); // V519. The 'x' variable is assigned values twice successively. Perhaps this is a mistake.
ã¢ãã©ã€ã¶ãŒã¯ãæåãš2çªç®ã®å²ãåœãŠã®éã«è²§åŒ±ãªrcãå¿ èŠãšãã人ãããªããšããäºå®ã«åæºããŠããŸãã ã¯ããå¿ èŠãããŸããã ããããçµå±ã®ãšããïŒ
- ãããã°äžã«ãã¬ãŒã¯ãã€ã³ããèšå®ãããããçãããã©ããã確èªãããšäŸ¿å©ã§ãã
- ããã«rcãã§ãã¯ã以åã«ãã£ãïŒãŸãã¯ãã£ãå¯èœæ§ãããïŒããšã瀺ãã³ã¡ã³ãããããŸãã 圌ã¯ãŸãããã®ãã§ãã¯ã¯çµ¶å¯Ÿã«å¿ èŠã§ã¯ãªããšèšããŸãã
ãã¡ãããã¢ãã©ã€ã¶ãŒã¯ã³ã¡ã³ããèªã矩åã¯ãªããããããã§ãã¹ãŠãåé¡ãªãçç±ã¯ããããŸããã
ZeroMqã®çµè«
ã³ãŒãå ã®çãããå Žæã«é¢ããæçšãªã¡ãã»ãŒãžã¯1ã€ã§ã¯ãããŸããã ãŸããæåããããã®ã©ã€ãã©ãªã®ã³ãŒãã«ã€ããŠéåžžã«é«ãæèŠããããšèšã£ãã
ç§ã®ãããžã§ã¯ã
420ãã¡ã€ã«ïŒ8ã€ã®ãµããããžã§ã¯ãïŒãåæã«9åã99ã®èŠåã ããã¯ããã¡ã€ã«ãããå¹³å0.23èŠåã§ãã
ã¿ã€ãstd ::ãªã¹ãã®äœ¿çšã«ãããæããªééã
æ··ä¹±ã¯ãäžéšã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ã空ã®ã³ã³ããã¿ã€ãã¡ãœãããå®éã«ã³ã³ãããã¯ãªã¢ããããšã§ãã ããããstd ::ãªã¹ãã®å Žåãããã¯åãªãç¡å¹ãã§ãã¯ã§ãã ã¯ãªã¢ïŒïŒã«çœ®ãæããå¿ èŠããããŸã
void CHttpDownloaderBase::GetResponseHeader(const std::string& strHeaderName, std::list<std::string>& listValues) const { listValues.empty(); // V530. The return value of function 'Foo' is required to be utilized. ...
æ··ä¹±ã¯ãäžéšã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ã空ã®ã³ã³ããã¿ã€ãã¡ãœãããå®éã«ã³ã³ãããã¯ãªã¢ããããšã§ãã ããããstd ::ãªã¹ãã®å Žåãããã¯åãªãç¡å¹ãã§ãã¯ã§ãã ã¯ãªã¢ïŒïŒã«çœ®ãæããå¿ èŠããããŸã
æåã®äœ¿çšåŸã®ãã€ã³ã¿ãŒã®ç¢ºèª
const char *xml_attr(xml_t* xml, const char *attr) { ... const char *name = xml->name; if (! xml || ! xml->attr) // V595. The pointer was utilized before it was verified against nullptr. return NULL;
æªå®çŸ©ã®åäœ
å®éãVS2010ã®C ++ã³ã³ãã€ã©ã§ã¯ããã®ã³ãŒãã¯æå³ãããšããã«æ©èœããŸãã ããããæ£åŒã«ã¯-ã¯ããæšæºã§ã¯ãäžå®ã®åäœããšæžãããŠããŸãã ãããä¿®æ£ããæ¹ãè¯ãã
while (*(n = ++s + strspn(s, XML_WS))) // V567. Undefined behavior. The variable is modified while being used twice between sequence points. {...}
å®éãVS2010ã®C ++ã³ã³ãã€ã©ã§ã¯ããã®ã³ãŒãã¯æå³ãããšããã«æ©èœããŸãã ããããæ£åŒã«ã¯-ã¯ããæšæºã§ã¯ãäžå®ã®åäœããšæžãããŠããŸãã ãããä¿®æ£ããæ¹ãè¯ãã
æªåé«ãéçšäžã®åªå
äºé
æŒç®åãïŒãã¯ç°¡åã§ã ã==ããããåªå 床ãé«ã
if (!text[++r] == '\\') // V562. It's odd to compare a bool type value with a value of N. { break; } if (!text[++r] == 'u') // V562. It's odd to compare a bool type value with a value of N. { break; }
æŒç®åãïŒãã¯ç°¡åã§ã ã==ããããåªå 床ãé«ã
ãã€ã³ã¿ãŒæŒç®
ãã€ã³ã¿ãŒããšã«å€ãå€æŽããããšããCppCatã®ææ¡ã¯ééã£ãŠããŸãããã€ã³ã¿ãŒèªäœãå€æŽãããã£ãã®ã§ãã ããã«ããããããããã®ã¡ãã»ãŒãžã«ã¯ããã€ãã®å©ç¹ããããŸããããã¯ããã€ã³ã¿ãŒã«ãã£ãŠå€ãååŸãããšããäžå¿ èŠãªæäœã瀺ããŸã-ã*ãã ããã§ã¯äœ¿çšãããŠããŸãããã€ãŸããåã«ãch--ããšæžãããšãã§ããŸãã
TCHAR *ch = path + lstrlen(path) - 1; // V532. Consider inspecting the statement of '*pointer++' pattern. Probably meant: '(*pointer)++'. while (*ch && *ch != '\\') *ch--;
ãã€ã³ã¿ãŒããšã«å€ãå€æŽããããšããCppCatã®ææ¡ã¯ééã£ãŠããŸãããã€ã³ã¿ãŒèªäœãå€æŽãããã£ãã®ã§ãã ããã«ããããããããã®ã¡ãã»ãŒãžã«ã¯ããã€ãã®å©ç¹ããããŸããããã¯ããã€ã³ã¿ãŒã«ãã£ãŠå€ãååŸãããšããäžå¿ èŠãªæäœã瀺ããŸã-ã*ãã ããã§ã¯äœ¿çšãããŠããŸãããã€ãŸããåã«ãch--ããšæžãããšãã§ããŸãã
è¿œå æ¡ä»¶
ç°¡åã§ã-p1ãšã¹ããŒã¹ãæ¯èŒããå Žåãæåã®ãã§ãã¯ã¯å¿ èŠãããŸããã
while (*p1 != 0 && *p1 == _T(' ')) // V590. Consider inspecting this expression. The expression is excessive or contains a misprint. p1++;
ç°¡åã§ã-p1ãšã¹ããŒã¹ãæ¯èŒããå Žåãæåã®ãã§ãã¯ã¯å¿ èŠãããŸããã
è¿œå æäœ
m_dwInPartPos = 0; m_pcOutData = NULL; ... m_dwInPartPos = 0; // V519. The 'x' variable is assigned values twice successively.
ãã®åæã§ã¯ãããŸãã
C ++ã®æ倧ã®æ²ãã¿ã®1ã€ã¯ïŒå°ãªããšããæ°ããæšæºã§åæåã¯ã©ã¹ãåºçŸãããŸã§ïŒãåæåã¯å®éã«ã¯ç¬ç«ãããšã³ãã£ãã£ã§ã¯ãªããæ°å€ã®ã»ããã§ãããšããããšã§ãã 1ã€ã®åæã«eRt_unkãããã2çªç®ã®åæã«eResourceUnknownãããã®ã§ãäž¡æ¹ãšã0ã«çããããšã幞éã§ããã
if (type == eRT_unk) // V556. The values of different enum types are compared. return false;
C ++ã®æ倧ã®æ²ãã¿ã®1ã€ã¯ïŒå°ãªããšããæ°ããæšæºã§åæåã¯ã©ã¹ãåºçŸãããŸã§ïŒãåæåã¯å®éã«ã¯ç¬ç«ãããšã³ãã£ãã£ã§ã¯ãªããæ°å€ã®ã»ããã§ãããšããããšã§ãã 1ã€ã®åæã«eRt_unkãããã2çªç®ã®åæã«eResourceUnknownãããã®ã§ãäž¡æ¹ãšã0ã«çããããšã幞éã§ããã
ããŠããããŠãžã£ã³ã«ã®å€å
žãªãã§ã©ãã«ïŒ==ã®ä»£ããã«=
ãŸããç§ã¯äœãèšãããšãã§ããŸã-æããªééããèšãèš³ã¯ãããŸããã
if (scheme == ZLIB_COMPRESSION) out.push(boost::iostreams::zlib_compressor()); else if (scheme = GZIP_COMPRESSION) out.push(boost::iostreams::gzip_compressor()); // V559. Suspicious assignment inside the condition expression of 'if/while/for' operator.
ãŸããç§ã¯äœãèšãããšãã§ããŸã-æããªééããèšãèš³ã¯ãããŸããã
誀æ€ç¥
é åã®å¢çãè¶ãã
int len = lstrlen(szLogDir); TCHAR ch = szLogDir[len-1]; // V557. Array overrun is possible.
å®éãlenå€æ°ã¯ã> 0ãã§ã¯ãã§ãã¯ãããŸããããã³ãŒãã®ããäžã§ãszLogDiræååèªäœãévoidã§ãããã©ããããã§ãã¯ãããŸãã 2çªç®ã®ãã§ãã¯ã§ã¯ãä¿¡é Œæ§ã¯è¿œå ãããŸããã
çãããæ©èœäžå š
ç§ã®ã³ãŒãã§ãã®ãããªéšåãèŠã€ããŸããïŒ
if (m_packets[i] != NULL) delete m_packets[i];
ç§ã®æèŠã§ã¯ããã®ãããªå Žåã®PVS-Studioã¯NULLãåé€ããŠãå®å šã§ãããšèšã£ãŠããŸããããCppCatã¯ããã«ã€ããŠäœãèšããŸããã§ããã
ç§ã®ãããžã§ã¯ãã®çµè«
99ã®èŠåã®ãã¡ãçŽ65ãã±ãŒã¹ã«å«ãŸããŠããŠããã°ã®åæ£ãšã³ãŒãã®åãªããæ¹åãã¯çŽ50/50ã§ããã
çµè«
é·æ
- ã·ã³ãã«ã
- äŸ¡æ Œ
- å®éã®ãã°ãèŠã€ããŸã
çæ
- VS2005ãšã®çµ±åã®æ¬ åŠ\ VS2008
- 誀æ€ç¥ã®ããçšåºŠã®å²å
ãã€ãã¹ãããããŸããããéããŸãïŒ
64ããããã§ãã¯ã®ãµããŒãã®æ¬ åŠã
PVS-Studioã®éçºè ãåžžã«åœŒãã«éäžããŠããçç±ãç解ã§ããŸããã§ããã Windows x64ã§ã¯ãããã°ã©ã ã®32ããããã«ããæ©èœããããã64ãããããŒãžã§ã³ãäœæãããšããåé¡ã¯ããã©ã€ããŒãèšè¿°ããå¿ èŠãããå ŽåããŸãã¯ããã°ã©ã ã3 GBãè¶ ããRAMãå¿ èŠãšããå Žåã«æãé »ç¹ã«çºçããŸãã ç§ã®çµ±èšã§ã¯ãããã¯ãããžã§ã¯ãã®çŽ10ã15ïŒ ã§ãã
MsBuildãªã©ãšã®çµ±åã®æ¬ åŠ
ãªããžããªã«ã³ãããããåã«ãã³ãŒããæåã§ç¢ºèªããããšã¯è«ççã«æããŸãã ãã¹ãŠã®ãã«ãã§ã¯ãªãïŒãã£ããïŒããã«ããµãŒããŒã§ã¯ãªãïŒã€ã³ã¿ã©ã¯ãã£ãã§ã¯ãããŸããïŒããã®ããã«ã ããã»ã©æéã¯ãããããååã®åã§æ¥ãããããšã¯ãããŸããã䟿å©ã§ãã
ãã©ã¹ã«ãªããããããŸããããéããŸãïŒ
èšå®ã®çŠæ¬²
CppCatã¯éåžžã«å³ããããšãå€æããŸããã ååãªæè»æ§ã¯ãããŸããããã¡ã€ã«ããã©ã«ããŒããã¡ã€ã«ã®ç¹å®ã®è¡ãã¹ãã£ã³ããé€å€ã§ããŸãã ãããããã¡ã€ã«ã®äžéšãé€å€ããæ¹æ³ã¯ïŒ ç¹å®ã®ãšã©ãŒãŸãã¯ãšã©ãŒã¯ã©ã¹ã®ãã§ãã¯ãç¡å¹ã«ããæ¹æ³ ãããŠãã°ããŒãã«ã§ã¯ãªãå Žåãããããã¡ã€ã«ã®äžéšã®ããã«ïŒ ããã¯äžå¯èœããã»ãšãã©ããã¥ã¡ã³ããèªãã§ããŸããã
ãŠã£ãã·ã¥ãªã¹ã
ããã«1
æ€èšŒããé€å€ãããèŠåã«é¢ããæ å ±ãã³ãŒããžã®ã³ã¡ã³ãã§ã¯ãªãããªããžããªãžã®ã³ãããããé€å€ã§ããå€éšãã¡ã€ã«ã®ã©ããã«ä¿åã§ãããšäŸ¿å©ã§ãã ãã¹ãŠã®ååãåãéçåæããŒã«ã䜿çšã§ããããã§ã¯ãªããã³ãŒãå ã®ã//-VïŒis_test_okïŒ=ïŒ501ãã®ãããªã³ãŒãã®ã³ãŒããèªãã§ããã®ç®çã«é©ããããã®ã¯é¢åã§ãã
ããã¬ã«2
èŠåã³ã³ããã¹ãã¡ãã¥ãŒã«[ã³ããŒ]ãªãã·ã§ã³ãš[Ctrl] + [V]ãããããŒãè¿œå ãããšäŸ¿å©ã§ãã ãããã®èŠåããªããžããªãžã®ã³ãããã®ã³ã¡ã³ãããã¹ãã«ã³ããŒãããšéåžžã«äŸ¿å©ã§ãã ãã¡ãããããã¥ã¡ã³ããéããŠããããã¿ã€ãã«ãã³ããŒã§ããŸã-ããããããã¹ãã¯ããã§äžè¬åãããæ€èšŒã®çµæã¯ã³ãŒãå ã®ç¹å®ã®è¡ã瀺ããå€æ°ã®ååã¯äŸ¿å©ã§ç解ãããããã®ã§ãã
æçµçãªçµè«
CppCatã®è¯ãç¹ã¯ãè³Œå ¥ããŒã«ã«äŸ¡å€ããããã©ãããèšç®ããããããšã§ãã Habréã«é¢ããæè¿ã®ã¬ãã¥ãŒãããå¹³åçãªC ++ããã°ã©ãã®å¹³å絊äžãåãäžããŸãããïŒ80,000ã«ãŒãã«ïŒ$ 2,370ïŒã ã ãã圌ã®ä»äºã®1æéã¯çŽ14ãã«ããããŸãã äžèšã®ãã°ã«äŒŒããã°ãèŠã€ããŠä¿®æ£ããïŒãããŠãæ¢ããŠãããã®ãæ£ç¢ºã«ããããªãå Žåã§ãïŒäœæ¥ã¯æäœ1æéãããããšã«åæãããšæããŸãã CppCatã®è²»çšã¯250ãã«ã§ãã ããã¯17æéã®ä»äºã®ãããªãã®ã§ãã ãããžã§ã¯ãã§ãã°ä¿®æ£ã«17æé以äžè²»ããããšãèšç»ããŠããå ŽåïŒããã³èšç»ããŠãããããžã§ã¯ããå°ãªãå ŽåïŒãè³Œå ¥ã¯æ£åœåãããŸãã
äžè¬ã«ãå°ããªãããžã§ã¯ããšåã ã®éçºè ã®é¢åãèŠãŠãããCppCatã®äœè ã«æè¬ããŸãã ãŠã£ãã·ã¥ãªã¹ãã®å®è£ ãšVS2008ãšã®çµ±åãæåŸ ããŠããŸãã