
ä»åãå°å®å®ã¯ç§ãã¡ã«ãšã©ãŒã®èå³æ·±ãäŸã瀺ããŸããã PVS-Studioã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããŠããªãŒãã³ãªÎŒManagerãããžã§ã¯ãããã¹ãããŸããã ããã¯ãé¡åŸ®é¡ã«ããèªåã€ã¡ãŒãžã³ã°çšã®ãœãããŠã§ã¢ããã±ãŒãžã§ãã
ÎŒManager
ããã¯æ¯èŒçå°ããªãããžã§ã¯ãã§ãã ãœãŒã¹ã³ãŒãã®éã¯çŽ11ã¡ã¬ãã€ãã§ãã ãã®ãããžã§ã¯ããå¿ èŠãªçç±ã¯ããããŸããã ç§ã¯ããã確èªããããã«é ŒãŸããŸããã ãããŠä»ããŠãã³ãŒã³ã¯å©ããæ¥ãã§ããŸãã ããããå°ãããããå¿ èŠãã€æçšãªãããžã§ã¯ãã
ãããžã§ã¯ããµã€ãïŒ Micro-Manager
åæã¯ããã€ãã®ããã«ã PVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠå®è¡ãããŸããã ãšããã§ãããèŠéããŠããŸã£ãå ŽåãæœåšçãªãŠãŒã¶ãŒãåŸ ã¡æãã§ããæ¯èŒã以äžã«ç€ºããŸã ãã ã³ãŒãã¢ãã©ã€ã¶ãŒã®æ¯èŒïŒCppCatãCppcheckãPVS-StudioãVisual Studio ãã
ããã§åæ çãªäœè«ã¯çµããã§ãã èå³æ·±ãã³ãŒãã¹ãããããèŠãŠã¿ãŸãããã
longïŒ= int

ÎŒManagerãããžã§ã¯ãã¯ãã¯ãã¹ãã©ãããã©ãŒã ã§ãããšäž»åŒµããŠããŸãã ãããã£ãŠããlongãã®ã¿ã€ãã«æ³šæããå¿ èŠããããŸãã 32ãããã·ã¹ãã ã§ã¯ããlongãåã®ãµã€ãºã¯ãintãåã®ãµã€ãºãšåãã§ãã ãã ãã64ãããã·ã¹ãã ã§ã¯ç°ãªãå ŽåããããŸãã Win64ã§ã¯ãã¿ã€ããlongãã¯32ãããã®ãŸãŸã§ããã Linuxã®64ãããã®äžçã§ã¯ ãããã³ã°ãã64ãããã§ããå¥ã®ããŒã¿ã¢ãã«ãæ¡çšãããŠããŸãã ãã®ã¿ã€ãã䜿çšããŠèŠæããå¿ èŠããããŸãã
ÎŒManagerãããžã§ã¯ãã«ã¯ã次ã®å€±æããã³ãŒããå«ãŸããŠããŸãã
typedef struct _DCMOTSTATUS { unsigned short wChannel; // Channel ident. unsigned int lPosition; // Position in encoder counts. unsigned short wVelocity; // Velocity in encoder counts/sec. unsigned short wReserved; // Controller specific use unsigned int dwStatusBits; // Status bits (see #defines below). } DCMOTSTATUS; int MotorStage::ParseStatus(...., DCMOTSTATUS& stat) { .... memcpy(&stat.lPosition, buf + bufPtr, sizeof(long)); //<<<(1) bufPtr += sizeof(long); memcpy(&stat.wVelocity, buf + bufPtr, sizeof(unsigned short)); bufPtr += sizeof(unsigned short); memcpy(&stat.wReserved, buf + bufPtr, sizeof(unsigned short)); bufPtr += sizeof(unsigned short); memcpy(&stat.dwStatusBits, buf + bufPtr, sizeof(unsigned long)); //<<<(2) return DEVICE_OK; }
è¡ïŒ1ïŒããã³ïŒ2ïŒã§ã¯ãããŒã¿ã¯ 'int'åã®å€æ°ã«ã³ããŒãããŸãã ã¿ã€ã 'long'ã®ãµã€ãºã«çãããã€ãæ°ãã³ããŒãããŸãã 64ãããããã°ã©ã ã§ã¯ã 'long'ã¯8ãã€ããå æã§ããããšãæãåºããŠãã ããã ãŸããã¿ã€ã 'int'ã¯4ãã€ãã®ã¿ãåããŸãã
ïŒ1ïŒã®å Žåãå¿é ããããšã¯ãããŸããã æ§é äœã®æ¬¡ã®ã¡ã³ããŒã®å€ãå€æŽããŸãã ãã®åŸããããã®ã¡ã³ããŒã¯åã³æºããããŸãã ãã§ã«æ£ããã
ãã ããã±ãŒã¹ïŒ2ïŒã¯éèŠã§ãã æåŸã®ã¡ã³ããŒã®å€ãå€æŽãããŸãã æ§é ã®å€åŽã«ã¬ã³ãŒãããããŸãã ããããããããã®ã¯ãéãšæã®æºã¡æ¬ ãã«äŸåããŸãã
PVS-Studio蚺æã¡ãã»ãŒãžã®ãããã§ãšã©ãŒãæ€åºãããŸãã
- V512ãmemcpyãé¢æ°ãåŒã³åºããšããããã¡ãŒãïŒstat.lPositionãããªãŒããŒãããŒããŸãã MotorStage.cpp 247
- V512ãmemcpyãé¢æ°ãåŒã³åºããšããããã¡ãŒãïŒstat.dwStatusBitsãããªãŒããŒãããŒããŸãã MotorStage.cpp 256
ãŽãå§çž®æ©ãåæ¢ããŸãïŒ

const unsigned char stopSgn[2] = {0x04, 0x66}; int MotorStage::Stop() { .... if (memcmp(stopSgn, answer, sizeof(stopSgn) != 0)) return ERR_UNRECOGNIZED_ANSWER; .... }
ãšã©ãŒã¯ãmemcmpïŒïŒé¢æ°ã1ãã€ãã®ã¿ãæ¯èŒããããšã§ãã ãªãã§ïŒ æ»æçãªééãã éãæ¬åŒ§ã¯ããã«çœ®ãããŸããã æ¯èŒãããã€ãæ°ã¯æ¬¡ã®ããã«èšç®ãããŸãïŒsizeofïŒstopSgnïŒïŒ= 0.ãã®åŒã¯å€ 'true'ã«çããã1ã«ãªããŸãã
æ¡ä»¶ã¯æ¬¡ã®ããã«ãªããŸãã
if (memcmp(stopSgn, answer, sizeof(stopSgn)) != 0)
ãšã©ãŒã¯èšºæã«ãã£ãŠæ€åºãããŸããïŒV526察å¿ãããããã¡ãŒãçããå Žåããmemcmpãé¢æ°ã¯0ãè¿ããŸãã ç¶æ ã®ééãã調ã¹ãããšãæ€èšããŠãã ããã MotorStage.cpp 385
åäžã®æ¯èŒ

const char* g_Out = "Out"; int FieldDiaphragm::OnCondensor(....) { .... std::string value; .... if (value == g_Out) return g_hub.SetCondensorPosition(*this, *GetCoreCallback(), 0); else if (value == g_Out) return g_hub.SetCondensorPosition(*this, *GetCoreCallback(), 1); .... }
2çªç®ã®ifã¹ããŒãã¡ã³ãã«ç¡å¹ãªæ¡ä»¶ãå«ãŸããŠããŸãã 2çªç®ã®æ¡ä»¶ã¯ã©ãããã¹ãããããããŸããã ãã ãã2çªç®ã®æ¡ä»¶ãæºããããããšã¯ãªãããšãæ確ã«ããããŸãã
ãšã©ãŒèšºæïŒV517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ1455ã1457ãLeicaDMR.cpp 1455
åæ§ã®ãšã©ãŒãå«ãå¥ã®ã³ãŒãããããŸãã ã©ããããããã€ãã®ãã€ãŒã«ã®äœçœ®ãèšå®ããéã«åé¡ãããã§ãããïŒ
class Wheel : public CStateDeviceBase<Wheel> { .... unsigned wheelNumber_; .... }; int Wheel::SetWheelPosition(int position) { unsigned char cmd[4]; cmd[0] = moduleId_; cmd[2] = 0; cmd[3] = 58; if (wheelNumber_ == 1) { switch (position) { case 0: cmd[1] = 49; break; case 1: cmd[1] = 50; break; case 2: cmd[1] = 51; break; case 3: cmd[1] = 52; break; case 4: cmd[1] = 53; break; case 5: cmd[1] = 54; break; } } else if (wheelNumber_ == 1) { switch (position) { case 0: cmd[1] = 33; break; case 1: cmd[1] = 64; break; case 2: cmd[1] = 35; break; case 3: cmd[1] = 36; break; case 4: cmd[1] = 37; break; case 5: cmd[1] = 94; break; } .... }
PVS-Studio蚺æã¡ãã»ãŒãžïŒV517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ645ã654ãLudl.cpp 645
ç§ãã¡ã¯äœããå¿ããããã§ãã

ãã®ã³ãŒããèŠãããšããå§ãããŸãã äœãæ¬ ããŠããã®ãæ°ã¥ããŸãããïŒ
class MP285 { .... static int GetMotionMode() { return m_nMotionMode; } .... }; int ZStage::_SetPositionSteps(....) { .... if (MP285::GetMotionMode == 0) { long lOldZPosSteps = (long)MP285::Instance()->GetPositionZ(); dSec = (double)labs(lZPosSteps-lOldZPosSteps) / dVelocity; } else { dSec = (double)labs(lZPosSteps) / dVelocity; } .... }
éåžžã«éèŠãªããšããããŸããã æ¬åŒ§ïŒïŒã¯å¿ããããŠããŸãã ããã°ã©ã ã¯GetMotionModeïŒïŒé¢æ°ãåŒã³åºããè¿ãããå€ããŒããšæ¯èŒããå¿ èŠããããŸãã 代ããã«ãé¢æ°ã®ã¢ãã¬ã¹ããŒããšæ¯èŒãããŸãã
ãšã©ãŒã¯èšºæã«ãã£ãŠæ€åºãããŸããïŒV516å¥åŠãªåŒã®æ€æ»ãæ€èšããŠãã ããã NULL以å€ã®é¢æ°ãã€ã³ã¿ãŒã¯NULLãšæ¯èŒãããŸãïŒ 'MP285 :: GetMotionMode == 0'ã MP285ZStage.cpp 558
å€ç¬ãªæŸæµªè

int HalogenLamp::SetIntensity(long intensity) { .... command_stream.str().c_str(); .... }
ããã¯äœã§ãã ãªãã¡ã¯ã¿ãªã³ã°ã®å¯äœçšïŒ äžå®å šãªã³ãŒãã§ããïŒ ç¡å®³ãªäœåãªã©ã€ã³ãééãïŒ
ããªãã¯ãã®ãããªå€ç¬ãªæŸæµªè ãèŠãããšãã§ãã2ã€ã®å ŽæããããŸãïŒ
- V530é¢æ° 'c_str'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã ZeissCAN.cpp 1553
- V530é¢æ° 'c_str'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã ZeissCAN.cpp 2800
ãã©ããã³

int LeicaScopeInterface::GetDICTurretInfo(....) { .... std::string tmp; .... if (tmp == "DIC-TURRET") scopeModel_->dicTurret_.SetMotorized(true); else scopeModel_->dicTurret_.SetMotorized(true); .... }
ããããœãããŠã§ã¢ãã©ã¢ã³ã®å€èŠ³ã§ãã æ¡ä»¶ãæºããããŠãããã©ããã«é¢ä¿ãªããåãã³ãŒããå®è¡ãããŸãã
èŠåïŒV523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã LeicaDMIScopeInterface.cpp 1296
åæ§ã®çš®é¡ã®å¥ã®ééãã åãè¡ãããã§æ¯èŒãããŸãã ãã®ã³ãŒãã«ã¯ããããã¿ã€ããã¹ãå«ãŸããŠããŸãã
int XLedDev::Initialize() { .... if (strcmp( XLed::Instance()->GetXLedStr(XLed::XL_WLedDevName + m_nLedDevNumber).c_str(), XLed::Instance()->GetXLedStr(XLed::XL_WLedDevName + m_nLedDevNumber).c_str() ) != 0) .... }
èŠåïŒV549 'strcmp'é¢æ°ã®æåã®åŒæ°ã¯2çªç®ã®åŒæ°ãšåãã§ãã XLedDev.cpp 119
äœããåããªã

å€ãfalseãããã³ãtrueãã¯ãã¿ã€ããintãã«æé»çã«ãã£ã¹ãã§ããŸãã
- falseã¯0ã«ãªããŸãã
- trueã¯1ã«ãªããŸãã
int F() { return false; }
é¢æ°FïŒïŒã¯0ãè¿ããŸãã
æã ãã¹ãç¯ããã¿ã€ãããintãã®ãšã©ãŒã¹ããŒã¿ã¹ã§ã¯ãªãããfalseããŸãã¯ãtrueããè¿ããŸãã ããã¯ç©å¿ãã«ãããã®ã§ãã ãšã©ãŒã¹ããŒã¿ã¹ãå€0ã§ãšã³ã³ãŒããããŠããŠãåé¡ãããŸããã
ãšã©ãŒã¹ããŒã¿ã¹ããŒã以å€ã®å€ã§ãšã³ã³ãŒããããŠããå Žåãåé¡ãçºçããŸãã ããããŸãã«ÎŒManagerãããžã§ã¯ãã§çºçããããšã§ãã
次ã®å®çŸ©æžã¿ã®å€ãå©çšå¯èœã§ãã
#define DEVICE_OK 0 #define DEVICE_ERR 1 // generic, undefined error #define DEVICE_INVALID_PROPERTY 2 #define DEVICE_INVALID_PROPERTY_VALUE 3 #define DEVICE_INVALID_PROPERTY_TYPE 5 ....
0ã¯ãã¹ãŠãæ£åžžã§ããããšãæå³ããããšã«æ³šæããŠãã ããã ãã®ä»ã®å€ã¯ãäœããã®ãšã©ãŒã®ååšã瀺ããŸãã
ÎŒManagerãããžã§ã¯ãã³ãŒãã«ã¯ãã¹ããŒã¿ã¹ãšå€ããtrueãããfalseãã§æ··ä¹±ããŠããããã«æããŸãã
CreatePropertyïŒïŒé¢æ°ãæ€èšããŠãã ããã
int MM::PropertyCollection::CreateProperty(....) { if (Find(pszName)) return DEVICE_DUPLICATE_PROPERTY; .... if (!pProp->Set(pszValue)) return false; .... return DEVICE_OK; }
åŒã³åºãpProp-> SetïŒpszValueïŒã倱æããå Žåãé¢æ°ã¯ãfalseããè¿ãããšã«æ³šæããŠãã ããã é¢æ°ãã¹ããŒã¿ã¹DEVICE_OKãè¿ãããšãããããŸãã ããã¯éåžžã«å¥åŠã§ãã
å¥ã®äžå¯©ãªã³ãŒãïŒ
int MM::PropertyCollection::RegisterAction( const char* pszName, MM::ActionFunctor* fpAct) { MM::Property* pProp = Find(pszName); if (!pProp) return DEVICE_INVALID_PROPERTY; pProp->RegisterAction(fpAct); return true; }
æåŸã«ããreturn true;ãã衚瀺ãããŸãã ããã¯ãé¢æ°ãã¹ããŒã¿ã¹DEVICE_ERR 1ïŒäžè¬çãªæªå®çŸ©ã®ãšã©ãŒïŒãè¿ãããšãæå³ããŸãã åæã«ããã¹ãŠãæ¬åœã«è¯ãããã«æããŸãã
ããããããããã®å ŽæãçããããšåŒã¶çç±ãèªãã§ããã®ã¯å¥åŠã«æããŸãããããããééãã ãšã¯èšããŸããã å®éã®ãšãããç¹å¥ãªå Žåã匷調ããããã«ãfalseãã䜿çšãããŠããããšããããŸãã äŸïŒ
int XYStage::Home() { .... if (ret != DEVICE_OK) { ostringstream os; os << "ReadFromComPort failed in " "XYStage::Busy, error code:" << ret; this->LogMessage(os.str().c_str(), false); return false; // Error, let's pretend all is fine } .... }
ã³ã¡ã³ãã«æ³šæããŠãã ããã ãšã©ãŒãçºçããŸããã ãããããã¹ãŠãæ£åžžã§ããŒããè¿ããµããããŸãã ããããããã®ã³ãŒãã®ç¹æ§ã匷調ããããã«ãDEVICE_OKã®ä»£ããã«ãfalseããæžã蟌ãŸããŸãã
ãã®ãããªã³ã¡ã³ãã¯ã»ãã®æ°äŸã«åœãŠã¯ãŸããŸãã ããããä»ã®å Žæã§ã¯ããããééããªã®ãããè³ã䜿ã£ãcãªãã§ã€ã³ãããªã®ãã¯æ確ã§ã¯ãããŸããã ç§ã¯ãååã®å Žæã§ãã¹ãŠãæ£ããããšãææ¡ããååã¯æ¬åœã«ééãã§ãããšæããŸãã

ãããã«ããããã®ãããªã³ãŒãã¯éåžžã«æªèãããŸãã
ãã¹ãŠã®äžå¯©ãªå Žæã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Property.cpp 364
- V601ãtrueãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Property.cpp 464
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã PIGCSControllerCom.cpp 405
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Prior.cpp 778
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Prior.cpp 2308
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Prior.cpp 2313
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Prior.cpp 2322
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã SutterLambda.cpp 190
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã SutterLambda.cpp 269
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã SutterLambda.cpp 285
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Tofra.cpp 900
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Tofra.cpp 1806
- V601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸãã Tofra.cpp 1830
å¥åŠãªååŸ

int pgFocus::GetOffset(double& offset) { MM_THREAD_GUARD_LOCK(&mutex); deviceInfo_.offset = offset; MM_THREAD_GUARD_UNLOCK(&mutex); return DEVICE_OK; }
ããã¯ç§ã«ã¯æããŸããããã®ã³ãŒãã«äœãåé¡ããããŸããïŒ
ã¢ãã©ã€ã¶ãŒã¯ãã®ã³ãŒãã奜ã¿ãŸããïŒV669 'offset'åŒæ°ã¯éå®æ°åç §ã§ãã ã¢ãã©ã€ã¶ãŒã¯ããã®åŒæ°ãå€æŽãããŠããäœçœ®ãå€å¥ã§ããŸããã é¢æ°ã«ãšã©ãŒãå«ãŸããŠããå¯èœæ§ããããŸãã pgFocus.cpp 356
ãããŠæ¬åœã«ãããã¯å¥åŠã§ãã ãã®é¢æ°ã¯ãGet____ããšåŒã°ããŸãã é¢æ°ã¯ã¹ããŒã¿ã¹ãè¿ããŸãã 圌女ã¯ãŸããåç §ã«ããåŒæ°ããªãã»ããããåããŸãã ãããŠ...ãããŠãããã«äœãæžããŸããã ã©ã®ããã«æ©èœããã®ãããããŸããã ããããéã«å²ãåœãŠãè¡ãå¿ èŠããã£ãã®ã§ããããïŒ ãã®ãããªãã®ïŒ
offset = deviceInfo_.offset;
å¥ã®çãããGetTransmissionïŒïŒé¢æ°ïŒ
int SpectralLMM5Interface::GetTransmission(...., double& transmission) { .... int16_t tr = 0; memcpy(&tr, answer + 1, 2); tr = ntohs(tr); transmission = tr/10; .... }
PVS-StudioèŠåïŒV636ãtr / 10ãåŒã¯ãæé»çã«ãintãåãããdoubleãåã«ãã£ã¹ããããŸããã åæ°éšåã®æ倱ãé¿ããããã«ãæ瀺çãªåãã£ã¹ãã®äœ¿çšãæ€èšããŠãã ããã äŸïŒdouble A =ïŒdoubleïŒïŒXïŒ/ Y;ã SpectralLMM5Interface.cpp 198
æ»ãå€ã¯doubleåã§ããããšã«æ³šæããŠãã ããïŒéä¿¡ã«ã€ããŠèª¬æããŠããŸãïŒã ãããããã®å€ã¯å¥åŠã«èšç®ãããŸãã æŽæ°å€ã¯10ã§é€ç®ãããŸãã粟床ã倱ããããšãã匷ãçãããããŸãã ããšãã°ããtrãã5ã®å Žåãé€ç®åŸã¯0.5ã§ã¯ãªã0ã«ãªããŸãã
ããããæ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
transmission = tr/10.0;
ãšã©ãŒãŸãã¯ãšã©ãŒãªãïŒ ç¬¬äžå°è±¡ã¯æ¬ºãããšãã§ããŸãã

C / C ++ã§ã¯ããŒãããå§ãŸãæ°åã¯8é²åœ¢åŒã§äžãããããšèŠãªãããŸãã ÎŒManagerãããžã§ã¯ãã«ã¯ã1ã€ã®çãããå ŽæããããŸãã
int LeicaDMSTCHub::StopXY(MM::Device& device, MM::Core& core) { int ret = SetCommand(device, core, xyStage_, 010); if (ret != DEVICE_OK) return ret; return DEVICE_OK; }
PVS-StudioèŠåïŒV536䜿çšãããå®æ°å€ã¯8é²æ°åœ¢åŒã§è¡šãããããšã«æ³šæããŠãã ããã 10æïŒ010ã12æïŒ8. LeicaDMSTCHub.cpp 142
圌ããæ¬åœã«8é²æ°ã§æžããã8çªã䜿ãããã®ãããããšãééããªã®ãã¯æããã§ã¯ãããŸããã ä»ã®å Žæã§ã¯ã10é²æ°ã§æžãããæ°å€ãSetCommandïŒïŒé¢æ°ã«æž¡ãããŸãã ããšãã°ã次ã®ããã«ïŒ
int ret = SetCommand(device, core, xyStage_, 35, ack);
ãšã©ãŒãèŠã€ãã£ããã©ããã¯ããããŸãããããã®å Žæã«ã€ããŠèšåãã䟡å€ã¯ãããŸãã
å®ç§äž»çŸ©è ã¯inããŠãã

éèŠã§ãªãäºçŽ°ãªããšããããããããŸãã ãã ããã»ãšãã©ãã¹ãŠã®ããã°ã©ããŒã¯å®ç§äž»çŸ©è ã§ãã ã€ã¶ãããŸãããã
äœåãªè¡ããã£ã±ãã§ãã äžäŸïŒ
int XYStage::OnTriggerEndX(MM::PropertyBase* pProp, MM::ActionType eAct){ if (eAct == MM::BeforeGet) { int ret = GetCommandValue("trgse",xChannel_,chx_.trgse_); if (ret!=DEVICE_OK) if (ret!=DEVICE_OK) return ret; ..... }
2çªç®ã®ãã§ãã¯ã¯æããã«äžèŠã§ãã
å¥ã®äŸïŒ
int AFC::Initialize() { int ret = DEVICE_OK; .... if (ret != DEVICE_OK) return ret; AddAllowedValue("DichroicMirrorIn", "0", 0); AddAllowedValue("DichroicMirrorIn", "1", 1); if (ret != DEVICE_OK) return ret; .... }
2çªç®ã®ãã§ãã¯ãæå³ããããŸããã ãã以åã¯ãå€æ°ãretãã¯ã©ãã§ãå€æŽãããŸããã 2çªç®ã®ãã¹ãã¯å®å šã«åé€ã§ããŸãã
ãã®ãããªè¿œå ã®ãã§ãã¯ããããããããŸãã ãªã¹ããæäŸããŸãïŒ Micro-Manager-V571-V649.txt
ããããªããšãããsprintfïŒïŒé¢æ°ãæäœãããšãã«ééã£ã圢åŒã«æ³šæããããšãã§ããŸãã 笊å·ãªãå€æ°ã¯ç¬Šå·ä»ãå€æ°ãšããŠåºåãããŸãã ããã«ããã倧ããªå€ãæ£ããå°å·ãããªãå ŽåããããŸãã
int MP285Ctrl::Initialize() { .... unsigned int nUm2UStepUnit = MP285::Instance()->GetUm2UStep(); .... sprintf(sUm2UStepUnit, "%d", nUm2UStepUnit); .... }
ãã®ãããªå Žæã¯3ã€ãããŸããã
- V576圢åŒãæ£ãããããŸããã 'sprintf'é¢æ°ã®3çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã æŽæ°åã®SIGNEDåŒæ°ãå¿ èŠã§ãã MP285Ctrl.cpp 253
- V576圢åŒãæ£ãããããŸããã 'sprintf'é¢æ°ã®3çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã æŽæ°åã®SIGNEDåŒæ°ãå¿ èŠã§ãã MP285Ctrl.cpp 276
- V576圢åŒãæ£ãããããŸããã 'sprintf'é¢æ°ã®3çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã æŽæ°åã®SIGNEDåŒæ°ãå¿ èŠã§ãã MP285Ctrl.cpp 327
ãããã«
ãããšä»ã®ãããžã§ã¯ãã®åäžã®ãã§ãã¯ã¯å¹æçã§ã¯ãããŸããã ãã®å©ç¹ã¯ãéçã³ãŒãã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããå Žåã«ã®ã¿åŸãããŸãã ãã®åŸãå€ãã®ãšã©ãŒãšã¿ã€ããã¹ãæ©æã«ä¿®æ£ãããŸãã ã³ã³ãã€ã©ãŒãçæããèŠåã®æ¡åŒµãšããŠéçåæãæ€èšããŠãã ããã
Windowsãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®äžèŠæš¡ããã³å€§èŠæš¡ãããžã§ã¯ããäœæããããŒã ã®å Žåã PVS-Studioéçã¢ãã©ã€ã¶ãŒã®äœ¿çšããå§ãããŸãã æéã¯ãããŒã ã®èŠæš¡ãšå¿ èŠãªãµããŒãã¬ãã«ã«ãã£ãŠç°ãªããŸãã
å°ããªããŒã ãåã ã®éçºè åãã«ã CppCatããŒã«ãæäŸããŠããŸãã å人ã©ã€ã»ã³ã¹-250ãã«ã æŽæ°-200ãã«ã è€æ°ã®ã©ã€ã»ã³ã¹ãè³Œå ¥ããå Žå-å²åŒã
Linuxã䜿çšããŠããå Žåã¯ãç¡æã®Cppcheckã³ãŒãã¢ãã©ã€ã¶ãŒã«æ³šæããããšããå§ãããŸã ã ãŸãã¯ãPVS-Studioã®ã¹ã¿ã³ãã¢ãã³ããŒãžã§ã³ããè©Šããã ããã
PS
ãã®èšäºã®ç¿»èš³ïŒã ãŠãã³ãŒã³ã®å°å®å®ãžã®æ ãã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§ãããã«å¯ŸããåçãåéããŸããïŒ PVS-Studioããã³CppCatããŒãžã§ã³2014ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã