ãããžã§ã¯ãã«ã€ããŠ
Telegramã¯ãåœéåžå Žã«ç¹åããç¡æã®ã¡ãã»ã³ãžã£ãŒã§ãããããã¹ãã¡ãã»ãŒãžãšããŸããŸãªåœ¢åŒã®ã¡ãã£ã¢ãã¡ã€ã«ã®äž¡æ¹ã亀æã§ããŸãã AndroidãiOSãWindows PhoneãOS XãWindowsãLinuxã®ããŒãžã§ã³ããããŸãã
ãã®ãããžã§ã¯ãã®äœè ã¯ã人æ°ã®VKontakteãœãŒã·ã£ã«ãããã¯ãŒã¯ã«ç²ŸéããŠããPavelãšNikolai Durovsã§ãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéä¿¡ã®å®å šæ§ãšä¿è·ã®åŒ·åã«ç¹ã«éç¹ã眮ãããŸãïŒãã®çµæãç§å¯ã®èªå·±åé€ãã£ãããªã©ãäœæãããå¯èœæ§ããããŸãïŒã éä¿¡ãæå·åããããã«ããã³ã©ã€ã»ãã¥ãããéçºããMTProtoãã¯ãããžãŒã䜿çšãããŸãã
åæã®ããã«ããã¹ã¯ãããWindowsã¢ããªã±ãŒã·ã§ã³ãéžæãããŸããããã®ãœãŒã¹ã³ãŒãã¯GitHubã®å¯Ÿå¿ãããªããžããªã«ãããŸã ã
ã¢ããªã±ãŒã·ã§ã³ãå€ãã®ãµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšããŠããããšã¯æ³šç®ã«å€ãããããã¢ããªã±ãŒã·ã§ã³ãèªåã§æ§ç¯ããããšã«æ±ºããå Žåã¯ãããããåãå¿ èŠããããŸãã äžæ¹ãéçºè ã¯ããµãŒãããŒãã£ãœãããŠã§ã¢ã®ã¢ã»ã³ããªãšã€ã³ã¹ããŒã«ã«é¢ããåªããããã¥ã¡ã³ããæäŸããŠãããã®ã§ãåé¡ã¯ãªãã¯ãã§ãã
ã¿ã€ãã«ã«ã€ããŠ
èšäºã®ã¿ã€ãã«ã«ã€ããŠè³ªåããããããããŸããã ãã©ã®ããã«ïŒããšå°ããŸãã ã¢ãã©ã€ã¶ãŒã䜿çšããŠãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããæ€èšŒããæ¹æ³ã¯æããã§ãããéãã§ãã¯ãšã¯ã©ãããæå³ã§ããïŒ
äžèšã§æžããããã«ãäºåã«ã³ãŒãããé«å質ãæåŸ ã§ããŸãã ãã®ãããžã§ã¯ãã¯ãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãåªå ããå°é家ã«ãã£ãŠåŠçãããŠãããšèšã£ãŠããç§ã¯ã ãŸããŸãããå€ãã®ãšã©ãŒãèŠã€ããã®ã¯å¥åŠã§ãã ããã«ãè匱æ§ãæ€çŽ¢ããããã®ã³ã³ããã£ã·ã§ã³ãå®æçã«éå¬ãããŸããããã«ãããã³ãŒãã®ã¬ãã«ãç¶æãããŸãã ãã®ããããããžã§ã¯ãããã§ãã¯ããããšã¯ãã¢ãã©ã€ã¶ãŒãã¿ã¹ã¯ãã©ã®ããã«åŠçãããã確èªããè¯ãæ¹æ³ã§ãã ããããããã«ã€ããŠã¯ä»¥äžã§è©³ãã説æããŸãã
åæçµæ
ãããžã§ã¯ãããã¹ãããããã«ã PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããŸããã 1çªç®ãš2çªç®ã®é倧床ã¬ãã«ã®æ±çšèŠåïŒGAïŒãšæé©åïŒOPïŒãèæ ®ãããŸããã
ååãšããŠãPavelããŸã 管çè·ã®å°äœã«ãã£ãVkontakteãããã¯ãŒã¯ã®å質ãç¥ã£ãŠããã®ã§ãã³ãŒãã®å質ãäºåã«è©äŸ¡ã§ããŸãã ããã§ãã¹ãŠãåããããè¯ããšããã«èšããŸãã 2ã€ã®èŠå ã«ãã£ãŠåŒãèµ·ãããããšã©ãŒã¯ããã»ã©å€ããããŸããã§ããã
- æ¯èŒçå°æ°ã®åæããããã¡ã€ã«ïŒ159ïŒã
- é«ãã³ãŒãå質ã¹ã³ã¢ã
ã§ãããã圌ãã¯çŽ æŽãããä»äºãããŠãããšèšããŸãã ããã«ãããããããã¢ãã©ã€ã¶ãŒã®å©ããåããŠãããã€ãã®ããªãèå³æ·±ãå ŽæãèŠã€ããããšãã§ããŸãããããã«ã€ããŠã¯åŸã§æ€èšããŸãã
ãã®èšäºã§ã¯ããã¹ãŠã®ã¢ãã©ã€ã¶ãŒèŠåãéžæãããããã§ã¯ãªããããã€ãã®æãèå³æ·±ãèŠåãéžæãããŸããã
äžéšã®å Žæã§ã¯ãã³ãŒããã©ã°ã¡ã³ãã«ãšã©ãŒããããã©ããããããä¿®æ£ããæ¹æ³ãæ確ã«çããããšãäžå¯èœã§ããããã«ã¯ããœãŒã¹ã³ãŒãã®ãã詳现ãªèª¿æ»ãå¿ èŠãªããã§ãã ããã§ãã³ãŒããèšè¿°ããéçºè ãéçã¢ãã©ã€ã¶ãŒãçŽæ¥äœ¿çšããå¿ èŠæ§ãåã³åŒ·èª¿ããããšã«æ³šæããŠãã ããã
ãŸããã¢ãã©ã€ã¶ãŒã«ãããœãŒã¹ã³ãŒãã®ãã§ãã¯æé ã«ã泚æããŠãã ããã .slnãã¡ã€ã«ãããããããã¹ãã®éå§ã¯éåžžã«ç°¡åã§ãã ãã¹ãŠã®ãµãŒãããŒãã£ã©ã€ãã©ãªãã¢ã»ã³ãã«ããŠã€ã³ã¹ããŒã«ããããããœãªã¥ãŒã·ã§ã³ãèªäœããšã©ãŒãªãã§ãã«ããããããšã確èªããã ãã§ååã§ãããã®åŸãããŠã¹ãæ°åã¯ãªãã¯ããã ãã§ãããžã§ã¯ãã®åæãéå§ã§ããŸãã å®äºãããšãæ€åºããããšã©ãŒã«é¢ããåä¿¡ã¬ããŒãã確èªããã ãã§ãã
ã泚æ ãœãŒã¹ã³ãŒãã確èªãããŠãããéçºããŒã ã«ãã£ãŠããã€ãã®æŽæ°ããªãªãŒã¹ãããŠãããããã³ãŒãã®äžéšã®æçãèšäºã®æçãšç°ãªãå ŽåããããŸãã
èŠã€ãã£ããã°ãšçãããå Žæ
ã³ãŒãã®æ¬¡ã®ã»ã¯ã·ã§ã³ãèŠãŠã¿ãŸãããã åå¥ã«èšè¿°ãããŠããããããã®ã³ãŒããã©ã°ã¡ã³ãã¯ãšã©ãŒãæ€åºããããã®åé¡ã瀺ããŸããã
void Window::placeSmallCounter(.... int size, int count, ....) { .... QString cnt = (count < 100) ? QString("%1").arg(count) : QString("..%1").arg(count % 10, 1, 10, QChar('0')); int32 cntSize = cnt.size(); .... int32 fontSize; if (size == 16) { fontSize = 8; } else if (size == 32) { fontSize = (cntSize < 2) ? 12 : 12; } else { fontSize = (cntSize < 2) ? 22 : 22; } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V583 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€ãè¿ããŸãïŒ12. Telegram window.cpp 1607
ããã§ãšã©ãŒïŒãŸãã¯-2ïŒãèŠã€ããŠãã ããããšã©ãŒãå«ãã³ãŒããåå¥ã«èšè¿°ãããŠããã°ãé£ãããããŸããã äžé æŒç®åã䜿çšãããšãæ¡ä»¶ã®è«ççµæã«é¢ä¿ãªããå€æ° 'fontSize'ã«åãå€ãå²ãåœãŠãããŸãã ãã®äŸã®ããã«ãäžé æŒç®åã®ããããã§æ°åã12ããšã22ããç¹°ãè¿ã代ããã«ãããããã®æ°åã¯ç¹°ãè¿ããªãã§æ°åã12ããšã22ããæã€å¿ èŠããããŸãã
ãšã©ãŒãæããã«é¡èã§ããããšã«åæããŸãã ã©ãããŠãããèš±ãããã®ã§ããããïŒ ç§ãã¡ã¯ãã¹ãŠäººéã§ãããééããç¯ããŸãããã®å ŽåãèŠã€ããããå Žåããã®ãã¡ã€ã«ã®1700è¡ä»¥äžã§ããã®ãšã©ãŒã¯æ®ãã®ã³ãŒãã«å¯ŸããŠåé¡ãªã倱ãããŸãã
å€ãã®å Žå ããããžã§ã¯ãã§ã¯ããã€ã³ã¿ãŒãéåç §ããããšãšã©ãŒãçºçãããã®åŸã§nullptrã®åçæ§ããã§ãã¯ãããŸãã ãã¬ã°ã©ã ãäŸå€ã§ã¯ãããŸããã§ããã
void DialogsWidget::dialogsReceived(....) { const QVector<MTPDialog> *dlgList = 0; .... unreadCountsReceived(*dlgList); .... if (dlgList) .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããdlgListããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1620ã1626ãTelegram dialogswidget.cpp 1620
ãã§ã«ãã®ã³ãŒãã¹ããããããããã€ã³ã¿ãŒãdlgListãã®ãã§ãã¯ã¯ãåç §è§£é€åŸã«ã®ã¿é©çšãããããšãããããŸãã nullãã€ã³ã¿ãŒã®åç §è§£é€ã¯æªå®çŸ©ã®åäœã§ããã€ãŸããããã°ã©ã ãæ£åžžã«åäœããããã¯ã©ãã·ã¥ãããããã¹ãŠã®ãã¹ã¯ãŒããäžåœã®ããã«ãŒã«éä¿¡ãããããå¯èœæ§ããããŸãã ãã®ãããnullãã€ã³ã¿ãŒã®ãã§ãã¯ã¯ãåç §è§£é€ããåã«é 眮ããå¿ èŠããããŸããã
14åã®é¡äŒŒã®ã¡ãã»ãŒãžã«åºäŒããŸããã ããã€ãã®å Žæã§ã¯ãç©äºãè¯ããªããééãã¯ãããŸããã ãã§ãã¯ã¯åçŽã«ç¹°ãè¿ãããŸãïŒcheck-> dereferenceencing-> checkããã€ã³ã¿ã¯å€ãããŸããïŒããããã«çŠç¹ãåãããããšã¯ããŸããããå ã«é²ã¿ãŸãããã
次ã®äžå¯©ãªã³ãŒãã¹ããããïŒ
bool psShowOpenWithMenu(....) { .... IEnumAssocHandlers *assocHandlers = 0; .... if (....) { .... IEnumAssocHandlers *assocHandlers = 0; .... } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V561æ°ããå€ã宣èšãããããã 'assocHandlers'å€æ°ã«å€ãå²ãåœãŠãæ¹ãããããè¯ãã§ãããã 以åã®å®£èšïŒpspecific_wnd.cppã2031è¡ç®ãTelegrampspecific_wnd.cpp 2107
ç¹°ãè¿ããŸãããã³ãŒããæžãåºãããã³ãŒãããäœåãªãã®ããã¹ãŠåé€ããããšãå€æ°ã®ãªãŒããŒã©ã€ããç°¡åã«ããããŸãã ã¢ãã¿ãŒäžã§å šäœãèŠãããšãã§ããªãé·ãã®ã¡ãœããã§ã¯ãããã¯ããã»ã©åçŽã§ã¯ãããŸããã
å€æ° 'assocHandlers'ãå®çŸ©ããããã®åŸããã€ãã®æäœãå®è¡ãããŸãããåãã¿ã€ããšååãæã€å¥ã®å€æ°ã以äžã§ïŒãããŠãŸã£ããåãæ¹æ³ã§ïŒå®çŸ©ããããã®å€æ°ã¯äœ¿çšãããªããªããŸããã ããªãã¯ééãããªããšäž»åŒµãããããããŸããã ãããŸã§ã®ãšãããã¬ãŒãã¯ãã§ã«é 眮ãããŠãããèžãŸããç¬éãåŸ ã£ãŠããŸãã å°æ¥ãã³ãŒããæäœãã人ã¯ãã®åå®çŸ©ã«æ°ä»ããªãå¯èœæ§ãããããã®åŸãšã©ãŒãçŸããŸãã ãããããããè€æ°åèšåãããŠããããã«ããšã©ãŒãæ©ãä¿®æ£ãããã»ã©è¯ãã®ã§ããã®ãããªå Žæãé¿ããå¿ èŠããããŸãã
å¥ã®åæ§ã®ã³ãŒããèŠã€ããŸããã 察å¿ãã蚺æã¡ãã»ãŒãžïŒ
V561æ°ãã«å®£èšãããããã 'ms'å€æ°ã«å€ãå²ãåœãŠãæ¹ãããããè¯ãã§ãããã åã®å®£èšïŒwindow.cppãè¡1371ãTelegramwindow.cpp 1467
ã©ãã
void HistoryImageLink::getState(.... const HistoryItem *parent, ....) const { .... int skipx = 0, skipy = 0, height = _height; const HistoryReply *reply = toHistoryReply(parent); const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent); .... if (reply) { skipy = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); } if (fwd) { skipy = st::msgServiceNameFont->height + st::msgPadding.top(); } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V646ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã®æ€æ»ãæ€èšããŠãã ããã ãelseãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãã Telegram history.cpp 5181
ã¢ãã©ã€ã¶ãŒã®èŠåã«ãããšãããŒã¯ãŒããelseãã¯æ°ããæ¡ä»¶ã§ã¯ãªããæ³å®ãããŠããå¯èœæ§ãããããšã¯æããã§ãã ãã®ã³ãŒããæ£ããä¿®æ£ããæ¹æ³ãèšãã®ã¯é£ããã§ãã ããããç·šéãã䟡å€ã¯ãããŸããã
ãããã¯ã 'skipy'å€æ°ãäœããã®å€ã§åæåãããå¯äžã®2ã€ã®ãã©ã³ãã§ãã ãã©ã°ã¡ã³ããããæåã¯0ã«åæåããããã®åŸïŒãœãŒã¹ã³ãŒãã¯å€æ°ãããããããã§ã¯ç€ºããŠããŸããïŒããã®å€æ°ãã€ã³ã¯ãªã¡ã³ããããŠããããšãããããŸãã
ãã®ããšãããããããã2çªç®ã®æ¡ä»¶ãifãã¯äžèŠã§ããããããã«ã¯èª€ã£ãŠããïŒäž¡æ¹ã®æ¡ä»¶ãçã§ããå ŽåïŒãšçµè«ä»ããããšãã§ããŸãã ãelse-ifãã³ã³ã¹ãã©ã¯ããæ³å®ãããŠããå¯èœæ§ããããŸãïŒãã©ãŒãããã«ãã£ãŠå€æïŒãåŽé¢ããèŠãŠæ確ã«èšãã®ã¯é£ããã§ãã ãã ãããã®å Žæã¯æœåšçã«èª€ã£ãŠããå¯èœæ§ããããŸãã
次ã®äžå¯©ãªã³ãŒãïŒ
void DialogsListWidget::addDialog(const MTPDdialog &dialog) { History *history = App::history(App::peerFromMTP(dialog.vpeer), dialog.vunread_count.v, dialog.vread_inbox_max_id.v); .... SavedPeersByTime &saved(cRefSavedPeersByTime()); while (!saved.isEmpty() && history->lastMsg->date < saved.lastKey()) { History *history = App::history(saved.last()->id); .... } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V711ãã®ã«ãŒããå¶åŸ¡ããå€æ°ãšåãååã®ã«ãŒãå ã«ããŒã«ã«å€æ°ãäœæããããšã¯å±éºã§ãã é»å ±ãã€ã¢ãã°swidget.cpp 949
åé¡ã®æ¬è³ªã¯ãã¢ãã©ã€ã¶ãŒã®ã¡ãã»ãŒãžããæããã§ãã ã«ãŒãã®æ¬äœã§ã¯ãã«ãŒãã®å¶åŸ¡ã«äœ¿çšãããå€æ°ãšäžèŽããå€æ°ã宣èšãããŸãã ãã®ç¶æ³ã¯ã©ãããŠå±éºãªã®ã§ããããïŒ ã«ãŒãã®æ¬äœã®å€æ°ãå€æŽããŠããïŒå¥ã®å€æ°ãå€æŽãããŠããããïŒçµäºæ¡ä»¶ã«åœ±é¿ããŸãããããã¯ãã«ãŒããçµäºããæ¡ä»¶ã®äžéšãééã£ãŠããããšãå€æããå¯èœæ§ãããããã§ãïŒããšãã°ãç¡éã«ãŒããçºçããå¯èœæ§ããããŸãïŒã
ãããééãã§ã¯ãªãå Žåãå°ãªããšãèã«é ããŠããçæã
å¥ã®åé¡ã®ããå Žæãæ€èšããŠãã ããã
bool update() { .... wstring fname = from[i], tofname = to[i]; .... WCHAR errMsg[2048]; .... wsprintf(errMsg, L"Failed to update Telegram :(\n%s is not accessible.", tofname); .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V510 ãwsprintfWãé¢æ°ã¯ã3çªç®ã®å®åŒæ°ãšããŠã¯ã©ã¹åå€æ°ãåãåãããšãæåŸ ãããŠããŸããã ã¢ããããŒã¿updater.cpp 255
åé¡ã¯ãwstringåã®ãªããžã§ã¯ãã§ããé¢æ°ã®3çªç®ã®åŒæ°ã«ãããŸãã wsprintfé¢æ°ã®ä»®ãã©ã¡ãŒã¿ãŒã®ãªã¹ãã¯çç¥èšå·ã§çµãããããä»»æã®åã®åŒæ°ãæž¡ãããšãã§ããŸãããããã«ã¯æ¢ã«ç¹å®ã®å±éºã䌎ããŸãã çç¥èšå·ã®å®éã®åŒæ°ã¯ãPODã¿ã€ãã®ã¿ã§ããå¿ èŠããããŸãã ãã©ãŒãããæååããã 'wchar_t *'åã®åŒæ°ãäºæãããŠããããšãããããŸããã代ããã«ãªããžã§ã¯ããæž¡ãããããããã¡å ã§ãã³ã»ã³ã¹ã«ãªã£ãããããã°ã©ã ãã¯ã©ãã·ã¥ãããããå¯èœæ§ããããŸãã
æ¡ä»¶åŒã«è¿œå ã®éšååŒã䜿çšããŠã³ãŒãã®äžéšãæºãããŸããã
QImage imageBlur(QImage img) { .... const int radius = 3; .... if (radius < 16 && ....) .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãïŒååŸ<16ãTelegram images.cpp 241
èŠåã®æ¬è³ªã¯éåžžã«æ確ã§ã-å€æ°ã宣èšãããããã«åæåããïŒå®æ°ä»¥å€ïŒããã®ç¶æ ã§ãã®å€ãæ°å€ãªãã©ã«ãšæ¯èŒãããŸãã å®æ°ãæ°å€ãªãã©ã«ïŒèªç¶ïŒãå€ãããªããããæ¡ä»¶ã¯åžžã«trueãŸãã¯falseïŒãã®å Žåã¯åžžã« 'true'ïŒã«ãªããŸãã
å€æ°ã«å€ã2åå²ãåœãŠããããšãã«ã³ãŒãããããŸãããããããã®å²ãåœãŠã®éã§ã¯äœ¿çšãããŸããã§ããã å¥ã®å€æ°ãæ瀺ãããŠããå Žåãããã¯ééãã®å¯èœæ§ããããŸãã ãã®å Žåããã®ãããªå±éºã¯ãããŸããïŒå°ãªããšãç®ã«èŠããŸããïŒããããã圹ã«ç«ããªãããšã¯æããã§ãã
bool eBidiItemize(....) { .... dir = QChar::DirON; status.eor = QChar::DirEN; dir = QChar::DirAN; .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V519 ãdirãå€æ°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ2084ã2085ãTelegram text.cpp 2085
åŸã§äœ¿çšãããªãå€æ°ã宣èšãããŠããå Žæã¯ãå¥åŠã«èŠããŸãã ã³ãŒãã®åšãã«æ£ãã°ã£ãŠããæªäœ¿çšã®å€æ°ã«ã¯è¯ããã®ããªãããšã¯æããã§ãã åæ§ã®ã³ãŒãã®äŸïŒ
void extractMetaData(AVDictionary *dict) { .... for (....) { .... QString tmp = QString::fromUtf8(value); } }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒãQStringãã¿ã€ãã®V808 ãtmpããªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŸããã§ããã Telegram audio.cpp 2296
ã³ãŒãã¹ãããããããããããã«ãå€æ°ãtmpãã宣èšãããŠãããã©ãã§ã䜿çšãããŠããŸããã ãããåæåããããã«ã¡ãœããåŒã³åºãã䜿çšãããŸã;ããã«ãããããã¹ãŠã¯ã«ãŒãã®æ¬äœã§çºçããç¶æ³ãããã«æªåãããŸãã
ããã¯ãã®ã¿ã€ãã®å¯äžã®èŠåã§ã¯ãªããããã«16ããããŸããã
ãããã«
Telegramãã§ãã¯ã¯éåžžã«èå³æ·±ãããšãå€æãããiãã«ããã€ãã®ç¹ãä»ããŸããã
ãŸããç§ã¯ãã®ãããžã§ã¯ããé·ãéãã§ãã¯ãããã£ãã®ã§ãããæçµçã«ã¯å¯èœã«ãªããŸããã çŽæ¥æ€èšŒã®åã«ãµãŒãããŒãã£è£œãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãããããªããã°ãªããªãã£ããšããäºå®ã«ãããããããã€ã³ã¹ããŒã«ãšã¢ã»ã³ããªã®ããããããæ瀺ããããããããã¯åé¡ãåŒãèµ·ãããŸããã§ããã
第äºã«ããããžã§ã¯ãã®ã³ãŒãã¯é«å質ã§ããããšãå€æããŸããã ãã®ã¡ãã»ã³ãžã£ãŒã¯ãéä¿¡ã®æ©å¯æ§ãåªå ãããã®äžã«å€ãã®ãšã©ãŒãèŠã€ããããšã¯å¥åŠã§ãã
第äžã«ãã³ãŒãã¯ä»äºãç¥ã£ãŠããå°é家ã«ãã£ãŠäœæãããæ€çŽ¢ã³ã³ãã¹ããéå¬ãããŠãããšããäºå®ã«ãããããããPVS-Studioã¯ãŸã ããã€ãã®å¥åŠãªå ŽæãèŠã€ããããšãã§ããŸããïŒãã¹ãŠã§ã¯ãªããæãèå³æ·±ãå Žæãèšäºã«æžãããŠããããšãæãåºãããïŒè匱æ§ã ããã¯ãã¢ãã©ã€ã¶ãŒã®å質ãšããã®ãããªããŒã«ã䜿çšããããã°ã©ããŒã®å¿ èŠæ§ã匷調ããŠããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒã»ã«ã²ã€ãŽã¡ã·ãªãšãã PVS-Studioããã³Vice Versaã«ããé»å ±ã®åæ ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã