ã¯ããã«
Visual Studioéçºç°å¢ã§ã¯ãéçã³ãŒãåæãå¯èœã§ãã ãã®åæã¯éåžžã«äŸ¿å©ã§äœ¿ããããã§ãã ãã ããVisual Studioã¯èšå€§ãªæ°ã®æ©èœãå®è¡ããããšãç解ããŠããå¿ èŠããããŸãã ããã¯ã1ã€ã®æ©èœãåžžã«å°çšã®ããŒã«ã倱ãããšãæå³ããŸãã ãªãã¡ã¯ã¿ãªã³ã°ããã³ã«ã©ãŒãªã³ã°æ©èœã¯ãVisual Assistãšæ¯èŒããŠå€±ãããŸãã çµ±åãããç»åç·šéã®æ©èœã¯ãAdobe PhotoshopãCorelDRAWãããåœç¶æªããã®ã§ãã ç¶æ³ã¯ãéçã³ãŒãåæã®æ©èœãšäŒŒãŠããŸãã
ç§ãã¡ã¯çè«åããŸããã ç·Žç¿ã«ç§»ããŸãããã Visual Studio 2012ãã©ã«ããŒã«ããèå³æ·±ãPVS-Studioã¢ãã©ã€ã¶ãŒã®è¡šç€ºãèŠãŠã¿ãŸãããã
å®éãVisual Studioã«å«ãŸããŠãããœãŒã¹ãã¡ã€ã«ã確èªããäºå®ã¯ãããŸããã§ããã ãã¹ãŠãå¶ç¶ã«èµ·ãããŸããã Visual Studio 2012ã§ã¯ãæ°ããC ++ 11èšèªæšæºã®ãµããŒãã«ãããå€ãã®ããããŒãã¡ã€ã«ãå€æŽãããŸããã ã¿ã¹ã¯ã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒã«å«ãŸããããããŒãã¡ã€ã«ãåŠçã§ããããšã確èªããããšã§ããã
æããããªãããšã«ãheader * .hãã¡ã€ã«ã§ããã€ãã®ãšã©ãŒã«æ°ã¥ããŸããã Visual Studio 2012ã«å«ãŸãããã¡ã€ã«ãããã«è©³ãã調ã¹ãããšã«ããŸãããã€ãŸãã次ã®ãããªãã©ã«ããŒã§ãã
- ããã°ã©ã ãã¡ã€ã«ïŒx86ïŒ\ Microsoft Visual Studio 11.0 \ VC \ include
- ããã°ã©ã ãã¡ã€ã«ïŒx86ïŒ\ Microsoft Visual Studio 11.0 \ VC \ crt
- ããã°ã©ã ãã¡ã€ã«ïŒx86ïŒ\ Microsoft Visual Studio 11.0 \ VC \ atlmfc
ã©ã€ãã©ãªãæ§ç¯ããããã®ãããžã§ã¯ããŸãã¯ã¡ã€ã¯ãã¡ã€ã«ããªããããå®å šãªãã§ãã¯ã¯æ©èœããŸããã§ããã ãã®ãããã©ã€ãã©ãªã³ãŒãã®ããããªéšåã®ã¿ããã§ãã¯ããããšãã§ããŸããã æ€èšŒãäžå®å šã§ãã£ãŠããçµæã¯éåžžã«èå³æ·±ããã®ã§ãã
Visual C ++ã®ã©ã€ãã©ãªå ã§PVS-Studioã¢ãã©ã€ã¶ãŒãèŠã€ãããã®ãç¥ããŸãããã ã芧ã®ãšããããããã®ãšã©ãŒã¯ãã¹ãŠãVisual C ++èªäœã«çµã¿èŸŒãŸããã¢ãã©ã€ã¶ãŒãä»ããŠãªãŒã¯ãããŸããã
èŠã€ãã£ãçãããã¹ãããã®äžéš
以äžã®ãã¹ãŠã®ã³ãŒãã¹ããããã«ãšã©ãŒãå«ãŸããŠãããšã¯äž»åŒµããŸããã PVS-Studioã¢ãã©ã€ã¶ãŒã«ãã£ãŠææ¡ããããªã¹ããããæãçããããšæãããå ŽæãéžæããŸããã
å¥åŠãªãµã€ã¯ã«
ãã®çãããã³ãŒããæåã«èŠã€ãããŸããã 圌ã¯ç 究ã®ç¶ç¶ã®æšé²åãåããã
template <class T> class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase { .... HRESULT GetIndexOfPropertyInSet(....) { .... for(ULONG ul=0; ul<m_pUPropSet[*piCurSet].cUPropInfo; ul++) { if( dwPropertyId == pUPropInfo[ul].dwPropId ) *piCurPropId = ul; return S_OK; } return S_FALSE; } .... };
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ãæ»ããã atldb.h 4829
ã«ãŒãã®æ¬äœã¯1åã ãå®è¡ãããŸãã ãšã©ãŒã¯èª¬æãå¿ èŠãšããŸããã ã»ãšãã©ã®å Žåãç®çã®å€ãèŠã€ãã£ãããreturnãã¹ããŒãã¡ã³ããåŒã³åºãå¿ èŠããããŸãã ãã®å Žåãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
for(ULONG ul=0; ul<m_pUPropSet[*piCurSet].cUPropInfo; ul++) { if( dwPropertyId == pUPropInfo[ul].dwPropId ) { *piCurPropId = ul; return S_OK; } }
çãããæ圱
èªã¿ã«ããäŸã«è¬ããŸãã äžé æŒç®åã®ç¶æ ã«æ³šæããŠãã ããã
// TEMPLATE FUNCTION proj _TMPLT(_Ty) inline _CMPLX(_Ty) proj(const _CMPLX(_Ty)& _Left) { // return complex projection return (_CMPLX(_Ty)( _CTR(_Ty)::_Isinf(real(_Left)) || _CTR(_Ty)::_Isinf(real(_Left)) ? _CTR(_Ty)::_Infv(real(_Left)) : real(_Left), imag(_Left) < 0 ? -(_Ty)0 : (_Ty)0)); }
V501 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒã_Ctraits <_Ty> :: _ IsinfïŒrealïŒ_LeftïŒïŒãããããŸã æŒç®åã xcomplex 780
ãã®æ¡ä»¶ã§ã¯ãåŒã_CTRïŒ_TyïŒ:: _ IsinfïŒrealïŒ_LeftïŒïŒãã2åç¹°ãè¿ãããŸãã ããã«ãšã©ãŒããããã©ããããããŠã³ãŒããä¿®æ£ããæ¹æ³ãèšãã®ã¯é£ããã§ãã ãã ãããã®æ©èœã¯æããã«æ³šç®ã«å€ããŸãã
äžèŠãªãã§ãã¯
template<typename BaseType, bool t_bMFCDLL = false> class CSimpleStringT { .... void Append(_In_reads_(nLength) PCXSTR pszSrc, _In_ int nLength) { .... UINT nOldLength = GetLength(); if (nOldLength < 0) { // protects from underflow nOldLength = 0; } .... };
V547åŒ 'nOldLength <0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸããatlsimpstr.h 420
ããã«ééãã¯ãããŸããã ã³ãŒãããå€æãããšãè¡ã®é·ããè² ã«ãªãããšã¯ãããŸããã CSimpleStringTã¯ã©ã¹ã«ã¯ã察å¿ãããã§ãã¯ããããŸãã å€æ°nOldLengthã笊å·ãªãã®åã§ãããšããäºå®ã¯ãäœãç Žå£ããŸããã ãšã«ãããé·ãã¯åžžã«æ£ã§ãã ããã¯åãªãåé·ã³ãŒãã§ãã
誀ã£ãã©ã€ã³åœ¢æ
template <class T> class CHtmlEditCtrlBase { .... HRESULT SetDefaultComposeSettings( LPCSTR szFontName=NULL, .....) const { CString strBuffer; .... strBuffer.Format(_T("%d,%d,%d,%d,%s,%s,%s"), bBold ? 1 : 0, bItalic ? 1 : 0, bUnderline ? 1 : 0, nFontSize, szFontColor, szBgColor, szFontName); .... } };
V576圢åŒãæ£ãããããŸãã ã 'Format'é¢æ°ã®8çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã wchar_tåã·ã³ãã«ã®æååãžã®ãã€ã³ã¿ãŒãå¿ èŠã§ãã afxhtml.h 826
ãã®ã³ãŒãã¯ãUNICODEããã°ã©ã ã§èª€ã£ãã¡ãã»ãŒãžãçæããŸãã 'FormatïŒïŒ'é¢æ°ã¯ã8çªç®ã®åŒæ°ãLPCTSTRåã§ãããšæ³å®ããŠããŸãã ãã ããå€æ° 'szFontName'ã¯åžžã«LPCSTRåã§ãã
ãã€ãã¹ããŒã
typedef WORD ATL_URL_PORT; class CUrl { ATL_URL_PORT m_nPortNumber; .... inline BOOL Parse(_In_z_ LPCTSTR lpszUrl) { .... //get the port number m_nPortNumber = (ATL_URL_PORT) _ttoi(tmpBuf); if (m_nPortNumber < 0) goto error; .... };
V547åŒ 'm_nPortNumber <0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸããatlutil.h 2775
ããŒãçªå·ããŒãããå°ããããšã確èªããŠãæ©èœããŸããã å€æ°ãm_nPortNumberãã®ç¬Šå·ãªãã¿ã€ãã¯ãWORDãã§ãã ã¿ã€ããWORDãã¯ãunsigned shortãã§ãã
æªå®çŸ©ã®åäœ
次ã®ãã¯ãã¯ãVisual C ++ããããŒãã¡ã€ã«ã«ãããŸãã
#define DXVABitMask(__n) (~((~0) << __n))
ã©ãã§äœ¿çšãããŠãããããŸããªåäœãçºçããŸãã ãã¡ãããVisual C ++éçºè ã¯ããã®æ§é ãå®å šãã©ãããããç¥ã£ãŠããŸãã ãããããVisual C ++ã¯åžžã«è² ã®æ°ã®ã·ãããåãæ¹æ³ã§åŠçãããšããèªä¿¡ããããŸãã æ£åŒã«ã¯ãè² ã®æ°ãã·ãããããšãæªå®çŸ©ã®åäœãçºçããŸãã ãã®ãããã¯ã®è©³çŽ°ã«ã€ããŠã¯ãã ãã©ãŒããç¥ããªããæ°Žã«å ¥ããªãã§ãã ãããããŒã3 ããåç §ããŠãã ããã
64ãããã¢ãŒãã§ã®èª€ã£ãæäœ
ãã®64ããããšã©ãŒãã¿ãŒã³ã«ã€ããŠã¯ã64ãããC / C ++ã¢ããªã±ãŒã·ã§ã³ã®éçºã«é¢ããã¬ãã¹ã³ã§è©³ãã説æããŸãã ééããäœã§ããããç解ããããã«ã ã¬ãã¹ã³12ã«æ £ããããšããå§ãããŸãã
class CWnd : public CCmdTarget { .... virtual void WinHelp(DWORD_PTR dwData, UINT nCmd = HELP_CONTEXT); .... }; class CFrameWnd : public CWnd { .... }; class CFrameWndEx : public CFrameWnd { .... virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT); .... };
V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxframewndex.h 154
ãWinHelpãé¢æ°ããCFrameWndExãã¯ã©ã¹ã§èª€ã£ãŠå®£èšãããŠããŸãã æåã®åŒæ°ã®ã¿ã€ãã¯ãDWORD_PTRãã§ãªããã°ãªããŸããã åæ§ã®ãšã©ãŒã¯ãä»ã®ããã€ãã®ã¯ã©ã¹ã§ãèŠãããŸãã
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCMDIFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxmdiframewndex.h 237
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCMDIFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCMDIFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxmdiframewndex.h 237
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCOleIPFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxoleipframewndex.h 130
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCOleIPFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCOleIPFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxoleipframewndex.h 130
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCOleDocIPFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxoledocipframewndex.h 129
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCOleDocIPFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCOleIPFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxoledocipframewndex.h 129
- V301äºæããªãé¢æ°ã®ãªãŒããŒããŒãåäœã 掟çã¯ã©ã¹ãCOleDocIPFrameWndExãããã³åºæ¬ã¯ã©ã¹ãCOleDocIPFrameWndãã®é¢æ°ãWinHelpWãã®æåã®åŒæ°ãåç §ããŠãã ããã afxoledocipframewndex.h 129
å é ã®ãã€ã³ã¿ãŒã䜿çšãããNULLãšæ¯èŒãããŸã
ãã®ãããªå Žæã¯ããªãå€ãèŠã€ãããŸããã ç¹å®ã®åã±ãŒã¹ãå±éºã§ãããã©ãããåæããããšã¯éåžžã«ç²ããŸãã ã©ã€ãã©ãªã®äœæè ã¯ãããã§ã¯ããã«ããŸãããã§ãããã ããã€ãã®äŸãæããŸãã
BOOL CDockablePane::PreTranslateMessage(MSG* pMsg) { .... CBaseTabbedPane* pParentBar = GetParentTabbedPane(); CPaneFrameWnd* pParentMiniFrame = pParentBar->GetParentMiniFrame(); if (pParentBar != NULL && (pParentBar->IsTracked() || pParentMiniFrame != NULL && pParentMiniFrame->IsCaptured() ) ) .... }
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpParentBarããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ2840ã2841ãafxdockablepane.cpp 2840
æåã«ããpParentBarããã€ã³ã¿ãŒã䜿çšããŠGetParentMiniFrameïŒïŒé¢æ°ãåŒã³åºããŸãã ãŒãŒã¿ã¯ããã®ãã€ã³ã¿ãŒãNULLã§ããå¯èœæ§ããããšçªç¶çããã察å¿ãããã§ãã¯ãå®è¡ãããŸãã
AFX_CS_STATUS CDockingManager::DeterminePaneAndStatus(....) { .... CDockablePane* pDockingBar = DYNAMIC_DOWNCAST(CDockablePane, *ppTargetBar); if (!pDockingBar->IsFloating() && (pDockingBar->GetCurrentAlignment() & dwEnabledAlignment) == 0) { return CS_NOTHING; } if (pDockingBar != NULL) { return pDockingBar->GetDockingStatus( pt, nSensitivity); } .... }
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpDockingBarããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ582ã587ãafxdockingmanager.cpp 582
æåã¯ããã€ã³ã¿ãŒãpDockingBarããã¢ã¯ãã£ãã«äœ¿çšããããã®åŸçªç¶NULLãšæ¯èŒãããŸãã
æåŸã®äŸïŒ
void CFrameImpl::AddDefaultButtonsToCustomizePane(....) { .... for (POSITION posCurr = lstOrigButtons.GetHeadPosition(); posCurr != NULL; i++) { CMFCToolBarButton* pButtonCurr = (CMFCToolBarButton*)lstOrigButtons.GetNext(posCurr); UINT uiID = pButtonCurr->m_nID; if ((pButtonCurr == NULL) || (pButtonCurr->m_nStyle & TBBS_SEPARATOR) || (....) { continue; } .... }
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpButtonCurrããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1412ã1414ãafxframeimpl.cpp 1412
ã¯ã©ã¹ãm_nIDãã®ã¡ã³ããŒã«æ°è»œã«é£çµ¡ããŠãã ããã ãããŠãæ¡ä»¶ 'pButtonCurr'ã0ã«ãªãå¯èœæ§ãããããšãããããŸãã
ç Žå£ããããªããžã§ã¯ãã䜿çšãã
CString m_strBrowseFolderTitle; void CMFCEditBrowseCtrl::OnBrowse() { .... LPCTSTR lpszTitle = m_strBrowseFolderTitle != _T("") ? m_strBrowseFolderTitle : (LPCTSTR)NULL; .... }
V623 ãïŒïŒãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã äžæãªããžã§ã¯ããäœæããããã®åŸç Žæ£ãããŸãã afxeditbrowsectrl.cpp 308
äžé æŒç®åã¯ãç°ãªãåã®å€ãè¿ãããšã¯ã§ããŸããã ãããã£ãŠãã¿ã€ãCStringã®ãªããžã§ã¯ãã¯ããïŒLPCTSTRïŒNULLãããæé»çã«äœæãããŸãã 次ã«ããã®ç©ºã®æååããæé»çã«ãããã¡ãžã®ãã€ã³ã¿ãååŸãããŸãã åé¡ã¯ãCStringã®ãããªäžæãªããžã§ã¯ããç Žå£ãããããšã§ãã ãã®çµæããlpszTitleããã€ã³ã¿ãŒã®å€ãç¡å¹ã«ãªããæäœã§ããªããªããŸãã ããã§ã¯ããã®ãšã©ãŒãã¿ãŒã³ã®è©³çŽ°ãªèª¬æãèªãããšãã§ããŸãã
æéã®åé¡
UINT CMFCPopupMenuBar::m_uiPopupTimerDelay = (UINT) -1; .... void CMFCPopupMenuBar::OnChangeHot(int iHot) { .... SetTimer(AFX_TIMER_ID_MENUBAR_REMOVE, max(0, m_uiPopupTimerDelay - 1), NULL); .... }
V547åŒ 'ïŒ0ïŒ>ïŒm_uiPopupTimerDelay-1ïŒ'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸãããafxpopupmenubar.cpp 968
å€ '-1'ã¯ç¹å¥ãªãã©ã°ãšããŠäœ¿çšãããŸãã ãmaxããã¯ãã䜿çšããŠãããã°ã©ãã¯m_uiPopupTimerDelayå€æ°ã®è² ã®å€ããä¿è·ããããšãæãã§ããŸããã å€æ°ã«ã¯ç¬Šå·ãªãã®åããããããããã¯æ©èœããŸããã åžžã«ãŒã以äžã§ãã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
SetTimer(AFX_TIMER_ID_MENUBAR_REMOVE, m_uiPopupTimerDelay == (UINT)-1 ? 0 : m_uiPopupTimerDelay - 1, NULL);
åæ§ã®ãšã©ãŒã¯ãã¡ãã§ãïŒ
- V547åŒ 'ïŒ0ïŒ>ïŒm_uiPopupTimerDelay-1ïŒ'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸãããafxribbonpanelmenu.cpp 880
ç¡æå³ãªç·
BOOL CMFCTasksPaneTask::SetACCData(CWnd* pParent, CAccessibilityData& data) { .... data.m_nAccHit = 1; data.m_strAccDefAction = _T("Press"); data.m_rectAccLocation = m_rect; pParent->ClientToScreen(&data.m_rectAccLocation); data.m_ptAccHit; return TRUE; }
V607ææè ã®ãªãåŒãdata.m_ptAccHitãã afxtaskspane.cpp 96
ãdata.m_ptAccHit;ããšã¯äœã§ããïŒ ããããããã§ã圌ãã¯ãã®å€æ°ã«å€ãå²ãåœãŠãã®ãå¿ããŠããã®ã§ããããïŒ
å¥ã®0ãå¿ èŠãªå ŽåããããŸã
BOOL CMFCTasksPane::GetMRUFileName(....) { .... const int MAX_NAME_LEN = 512; TCHAR lpcszBuffer [MAX_NAME_LEN + 1]; memset(lpcszBuffer, 0, MAX_NAME_LEN * sizeof(TCHAR)); if (GetFileTitle((*pRecentFileList)[nIndex], lpcszBuffer, MAX_NAME_LEN) == 0) { strName = lpcszBuffer; return TRUE; } .... }
V512 ãmemsetãé¢æ°ã®åŒã³åºãã«ããããããã¡ãŒãlpcszBufferãã®ã¢ã³ããŒãããŒãçºçããŸãã afxtaskspane.cpp 2626
ãã®ã³ãŒãã¯ãçµç«¯ããŒãã§ã¯ãªãæååãè¿ãå¯èœæ§ããããšããçãããããŸãã ãããããé åã®æåŸã®èŠçŽ ããªã»ããããå¿ èŠããããŸãã
memset(lpcszBuffer, 0, (MAX_NAME_LEN + 1) * sizeof(TCHAR));
å¥åŠãªãifã
void CMFCVisualManagerOfficeXP::OnDrawBarGripper(....) { .... if (bHorz) { rectFill.DeflateRect(4, 0); } else { rectFill.DeflateRect(4, 0); } .... }
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã afxvisualmanagerofficexp.cpp 264
å±éºãªã¯ã©ã¹single_link_registry
ã¯ã©ã¹ãsingle_link_registryãã䜿çšãããšããã¹ãŠã®äŸå€ãæ£ããåŠçããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ãäºæããçµäºããå ŽåããããŸãã ã¯ã©ã¹ãsingle_link_registryãã®ãã¹ãã©ã¯ã¿ãèŠãŠã¿ãŸãããã
virtual ~single_link_registry() { // It is an error to delete link registry with links // still present if (count() != 0) { throw invalid_operation( "Deleting link registry before removing all the links"); } }
V509ãã¹ãã©ã¯ã¿å ã®ãã¹ããŒãæŒç®åã¯ãtry..catchãããã¯å ã«é 眮ããå¿ èŠããããŸãã ãã¹ãã©ã¯ã¿å ã§äŸå€ãçºçãããããšã¯éæ³ã§ãã agents.h 759
ãã®ãã¹ãã©ã¯ã¿ã¯äŸå€ãã¹ããŒããå ŽåããããŸãã ããã¯æªãèãã§ãã ããã°ã©ã ã§äŸå€ãçºçãããšããã¹ãã©ã¯ã¿ã®åŒã³åºãã«ãããªããžã§ã¯ãã®ç Žå£ãå§ãŸããŸãã ãsingle_link_registryããã¹ãã©ã¯ã¿ã§ãšã©ãŒãçºçãããšãå¥ã®äŸå€ãã¹ããŒãããŸãã ãã¹ãã©ã¯ã¿ã§ã¯åŠçãããŸããã ãã®çµæãC ++ã©ã€ãã©ãªã¯ãterminateïŒïŒé¢æ°ãåŒã³åºããŠããã°ã©ã ãçŽã¡ã«ã¯ã©ãã·ã¥ãããŸãã
åæ§ã®æªããã¹ãã©ã¯ã¿ïŒ
- V509ãã¹ãã©ã¯ã¿å ã®ãã¹ããŒãæŒç®åã¯ãtry..catchãããã¯å ã«é 眮ããå¿ èŠããããŸãã ãã¹ãã©ã¯ã¿å ã§äŸå€ãçºçãããããšã¯éæ³ã§ãã concrt.h 4747
- V509ãã¹ãã©ã¯ã¿å ã®ãã¹ããŒãæŒç®åã¯ãtry..catchãããã¯å ã«é 眮ããå¿ èŠããããŸãã ãã¹ãã©ã¯ã¿å ã§äŸå€ãçºçãããããšã¯éæ³ã§ãã agents.h 934
- V509ãã¹ãã©ã¯ã¿å ã®ãã¹ããŒãæŒç®åã¯ãtry..catchãããã¯å ã«é 眮ããå¿ èŠããããŸãã ãã¹ãã©ã¯ã¿å ã§äŸå€ãçºçãããããšã¯éæ³ã§ãã taskcollection.cpp 880
å¥ã®å¥åŠãªã«ãŒã
void CPreviewView::OnPreviewClose() { .... while (m_pToolBar && m_pToolBar->m_pInPlaceOwner) { COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pParent); if (!pInPlaceFrame) break; CDocument *pViewDoc = GetDocument(); if (!pViewDoc) break; // in place items must have a server document. COleServerDoc *pDoc = DYNAMIC_DOWNCAST(COleServerDoc, pViewDoc); if (!pDoc) break; // destroy our toolbar m_pToolBar->DestroyWindow(); m_pToolBar = NULL; pInPlaceFrame->SetPreviewMode(FALSE); // restore toolbars pDoc->OnDocWindowActivate(TRUE); break; } .... }
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ããã¬ãŒã¯ãã viewprev.cpp 476
ã«ãŒãã«ã¯ãç¶ç¶ãã¹ããŒãã¡ã³ãã¯ãããŸããã ã«ãŒãã®æåŸã¯ãbreakãã§ãã ããã¯éåžžã«å¥åŠã§ãã ãµã€ã¯ã«ã¯åžžã«1åã ãå®è¡ãããŸãã ããã«ãšã©ãŒããããããwhileãããifãã«çœ®ãæããæ¹ãè¯ãã§ãããã
å¥åŠãªå®æ°
ãªã¹ãã«ã¯èå³æ·±ããã®ã§ã¯ãªãã³ãŒãã«é¢ããä»ã®ãã€ããŒãªã³ã¡ã³ãããããŸãã äœãå±æ©ã«clearããŠããã®ããæ確ã«ãªãããã«ã1ã€ã®äŸãæããŸãã
afxdrawmanager.cppãã¡ã€ã«ã§ã¯ãäœããã®çç±ã§ãPiçªå·ã«å®æ°ãèšå®ãããŠããŸãã
const double AFX_PI = 3.1415926;
V624å®æ°3.1415926ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_PIå®æ°ã®äœ¿çšãæ€èšããŠãã ããã afxdrawmanager.cpp 22
ããã¯ééãã§ã¯ãªããå®æ°ã®ç²ŸåºŠã§ååã§ãã ããããM_PIå®æ°ã䜿çšããªãçç±ã¯æ確ã§ã¯ãããŸãããM_PIå®æ°ã¯ã¯ããã«æ£ç¢ºã«èšå®ãããŠããŸãã
#define M_PI 3.14159265358979323846
Visual C ++éçºè ã®åŒã³åºã
æ®å¿µãªãããVisual C ++ã®äžéšã§ããã©ã€ãã©ãªãæ§ç¯ããããã®ãããžã§ã¯ããŸãã¯ã¡ã€ã¯ãã¡ã€ã«ã¯ãããŸããã ãããã£ãŠãåæã¯éåžžã«è¡šé¢çã§ãã äœããèŠã€ããŠãããã«ã€ããŠæžããŸããã ä»ã«çãããå Žæããªããšã¯æããªãã§ãã ãã:)ã
PVS-Studioã䜿çšããŠã©ã€ãã©ãªããã§ãã¯ããæ¹ãã¯ããã«äŸ¿å©ã§ãããšç¢ºä¿¡ããŠããŸãã å¿ èŠã«å¿ããŠãã¡ã€ã¯ãã¡ã€ã«ãžã®çµ±åãä¿ããæ¯æŽããæºåãã§ããŠããŸãã ãŸããäœãééãã§äœãããã§ãªãããç解ããã®ãç°¡åã§ãã
çµè«
Visual Studio 2012ã§ã¯ãC / C ++ã³ãŒãã®éçåæããããŸãã ããããããã¯ããã§ååãšããæå³ã§ã¯ãããŸããã ããã¯æåã®ã¹ãããã«ãããŸããã ããã¯ãã³ãŒãã®å質ãæ¹åããããã®æ°ãããã¯ãããžãŒãç°¡åãã€å®äŸ¡ã«è©Šããã£ã³ã¹ã§ãã ãããŠãæ°ã«å ¥ã£ãããç§ãã¡ã®ãšããã«æ¥ãŠPVS-Studioãè³Œå ¥ããŠãã ããã ãã®ããŒã«ã¯ãæ¬ é¥ãšããéäžçã«æŠããŸãã 圌ã¯ãã®ããã«æçãããŠããŸãã ç§ãã¡ã¯ããã§ãéã皌ããŸããã€ãŸããéåžžã«ç©æ¥µçã«éçºããŠããŸãã
Visual C ++ã©ã€ãã©ãªã§ãšã©ãŒãèŠã€ãããŸããããéçåæããããŸãã Clangã³ã³ãã€ã©ã«ã¯ãã°ãèŠã€ãããŸããããéçåæããããŸãã ç§ãã¡ãååŸããç§ãã¡ã¯ããªãã®ãããžã§ã¯ãã®ãšã©ãŒãå®æçã«èŠã€ããŸãã Visual Studio 2005ã2008ã2010ã2012ã«ã¯åªããã€ã³ã¿ãŒã³ããããããã¯ã°ã©ãŠã³ãã§ãšã©ãŒãæ¢ãããšãã§ããŸãã