{"id":293553,"date":"2019-08-19T09:17:02","date_gmt":"2019-08-19T09:17:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=293553"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=293553","title":{"rendered":"CMake: \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0433\u043e \u043a\u043e\u0434\u0430"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c40\/4a5\/994\/c404a599454444ac3e9021195c5b3c3c.png\" alt=\"Picture 1\"><\/div>\n<p>  CMake \u2014 \u044d\u0442\u043e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u042d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 PVS-Studio, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0449\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u043a\u043e\u0434\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u0448\u0438\u0431\u043e\u043a, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u043d\u043e\u0433\u043e. \u0410\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f CMake \u043e\u0433\u0440\u043e\u043c\u043d\u0430. \u041d\u0430 \u043d\u0451\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435. \u0421\u0442\u0440\u0430\u0448\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0443 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  <a href=\"https:\/\/cmake.org\/\">CMake<\/a> (\u043e\u0442 \u0430\u043d\u0433\u043b. cross-platform make) \u2014 \u044d\u0442\u043e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. CMake \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439, \u0430 \u043b\u0438\u0448\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 CMakeLists.txt. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0432 2000 \u0433\u043e\u0434\u0443. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio\/\">PVS-Studio<\/a> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 2008 \u0433\u043e\u0434\u0443. \u0422\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u044b\u043b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 32-\u0445 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0435, \u0430 \u0432 2010 \u0433\u043e\u0434\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (<a href=\"https:\/\/www.viva64.com\/ru\/w\/v501\/\">V501<\/a>&#8212;<a href=\"https:\/\/www.viva64.com\/ru\/w\/v545\/\">V545<\/a>). \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0430 \u043a\u043e\u0434\u0435 CMake \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430.<\/p>\n<h2>\u041d\u0435\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1040\/\">V1040<\/a> Possible typo in the spelling of a pre-defined macro name. The &#8216;__MINGW32_&#8217; macro is similar to &#8216;__MINGW32__&#8217;. winapi.h 4112  <\/p>\n<pre><code class=\"cpp\">\/* from winternl.h *\/ #if !defined(__UNICODE_STRING_DEFINED) &amp;&amp; defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1040\/\">V1040<\/a> \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0435\u0449\u0451 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u043b\u0438\u0437\u0430 \u0441 \u043d\u0435\u0439, \u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043a\u0440\u0443\u0442\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0432 \u0438\u043c\u0435\u043d\u0438 <i>__MINGW32_<\/i>. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043e\u0434\u0443 \u0441 \u044d\u0442\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0441 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u0440\u043e\u043d:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ed5\/ad7\/425\/ed5ad7425145902765d728287ab5f2fa.png\" alt=\"Picture 3\"><\/div>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v531\/\">V531<\/a> It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 558  <\/p>\n<pre><code class=\"cpp\">bool IsVisualStudioMacrosFileRegistered(const std::string&amp; macrosFile,                                         const std::string&amp; regKeyBase,                                         std::string&amp; nextAvailableSubKeyName) {   ....   if (ERROR_SUCCESS == result) {     wchar_t subkeyname[256];                                           \/\/ &lt;=     DWORD cch_subkeyname = sizeof(subkeyname) * sizeof(subkeyname[0]); \/\/ &lt;=     wchar_t keyclass[256];     DWORD cch_keyclass = sizeof(keyclass) * sizeof(keyclass[0]);     FILETIME lastWriteTime;     lastWriteTime.dwHighDateTime = 0;     lastWriteTime.dwLowDateTime = 0;      while (ERROR_SUCCESS ==            RegEnumKeyExW(hkey, index, subkeyname, &amp;cch_subkeyname, 0, keyclass,                          &amp;cch_keyclass, &amp;lastWriteTime)) {     ....   }   .... }<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>sizeof <\/i> \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>cch_subkeyname<\/i> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0435 \u0443\u0447\u0451\u043b \u044d\u0442\u043e\u0433\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 4 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e. \u041f\u043e\u044f\u0441\u043d\u0438\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u044d\u0442\u043e \u00ab\u0432 4 \u0440\u0430\u0437\u0430\u00bb.<\/p>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0435\u0433\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/winreg\/nf-winreg-regenumkeyexw\">RegEnumKeyExW<\/a>:  <\/p>\n<pre><code class=\"cpp\">LSTATUS RegEnumKeyExW(   HKEY      hKey,   DWORD     dwIndex,   LPWSTR    lpName,    \/\/ &lt;= subkeyname   LPDWORD   lpcchName, \/\/ &lt;= cch_subkeyname   LPDWORD   lpReserved,   LPWSTR    lpClass,   LPDWORD   lpcchClass,   PFILETIME lpftLastWriteTime );<\/code><\/pre>\n<p>  \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>lpcchName <\/i> \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445: \u00abA pointer to a variable that specifies the size of the buffer specified by the <i>lpClass<\/i> parameter, in characters\u00bb. \u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <i>subkeyname <\/i> \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 512 \u0431\u0430\u0439\u0442 \u0438 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u044c 256 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0442\u0438\u043f\u0430 <i>wchar_t<\/i> (\u0432 Windows wchar_t \u044d\u0442\u043e 2 \u0431\u0430\u0439\u0442\u0430). \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 256 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e 512 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 2 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 1024.<\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043a\u0430\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043b\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"cpp\">DWORD cch_subkeyname = sizeof(subkeyname) \/ sizeof(subkeyname[0]);<\/code><\/pre>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>cch_keyclass<\/i>.<\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0431\u0443\u0444\u0435\u0440\u0430. \u041d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>V531 It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 556<\/li>\n<li>V531 It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 572<\/li>\n<li>V531 It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 621<\/li>\n<li>V531 It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 622<\/li>\n<li>V531 It is odd that a sizeof() operator is multiplied by sizeof(). cmGlobalVisualStudioGenerator.cxx 649<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v595\/\">V595<\/a> The &#8216;this-&gt;BuildFileStream&#8217; pointer was utilized before it was verified against nullptr. Check lines: 133, 134. cmMakefileTargetGenerator.cxx 133  <\/p>\n<pre><code class=\"cpp\">void cmMakefileTargetGenerator::CreateRuleFile() {   ....   this-&gt;BuildFileStream-&gt;SetCopyIfDifferent(true);   if (!this-&gt;BuildFileStream) {     return;   }   .... }<\/code><\/pre>\n<p>  \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>this-&gt;BuildFileStream<\/i> \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c. \u041d\u0435\u0443\u0436\u0435\u043b\u0438 \u044d\u0442\u043e \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c? \u041d\u0438\u0436\u0435 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041e\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043a\u0443. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v595\/\">V595<\/a> \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435. \u041f\u043e \u043e\u043f\u044b\u0442\u0443 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e.<\/p>\n<ul>\n<li>V595 The &#8216;this-&gt;FlagFileStream&#8217; pointer was utilized before it was verified against nullptr. Check lines: 303, 304. cmMakefileTargetGenerator.cxx 303<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v614\/\">V614<\/a> Uninitialized pointer &#8216;str&#8217; used. cmVSSetupHelper.h 80  <\/p>\n<pre><code class=\"cpp\">class SmartBSTR { public:   SmartBSTR() { str = NULL; }   SmartBSTR(const SmartBSTR&amp; src)   {     if (src.str != NULL) {       str = ::SysAllocStringByteLen((char*)str, ::SysStringByteLen(str));     } else {       str = ::SysAllocStringByteLen(NULL, 0);     }   }   .... private:   BSTR str; };<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <i>str<\/i>. \u0410 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u044d\u0442\u043e \u0438\u0437-\u0437\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>SysAllocStringByteLen <\/i> \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>src.str<\/i>.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v557\/\">V557<\/a> Array overrun is possible. The value of &#8216;lensymbol&#8217; index could reach 28. archive_read_support_format_rar.c 2749  <\/p>\n<pre><code class=\"cpp\">static int64_t expand(struct archive_read *a, int64_t end) {   ....   if ((lensymbol = read_next_symbol(a, &amp;rar-&gt;lengthcode)) &lt; 0)     goto bad_data;   if (lensymbol &gt; (int)(sizeof(lengthbases)\/sizeof(lengthbases[0])))     goto bad_data;   if (lensymbol &gt; (int)(sizeof(lengthbits)\/sizeof(lengthbits[0])))     goto bad_data;   len = lengthbases[lensymbol] + 2;   if (lengthbits[lensymbol] &gt; 0) {     if (!rar_br_read_ahead(a, br, lengthbits[lensymbol]))       goto truncated_data;     len += rar_br_bits(br, lengthbits[lensymbol]);     rar_br_consume(br, lengthbits[lensymbol]);   }   .... }<\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430. \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c <i>lengthbases<\/i> \u0438 <i>lengthbits<\/i> \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0432\u044b\u0445\u043e\u0434 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u043f\u043e \u043a\u043e\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;&gt;&#8217; \u0432\u043c\u0435\u0441\u0442\u043e &#8216;&gt;=&#8217;. \u0422\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/cwe.mitre.org\/data\/definitions\/193.html\">Off-by-one Error<\/a>.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0441\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c \u043f\u043e \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443:<\/p>\n<ul>\n<li>V557 Array overrun is possible. The value of &#8216;lensymbol&#8217; index could reach 28. archive_read_support_format_rar.c 2750<\/li>\n<li>V557 Array overrun is possible. The value of &#8216;lensymbol&#8217; index could reach 28. archive_read_support_format_rar.c 2751<\/li>\n<li>V557 Array overrun is possible. The value of &#8216;lensymbol&#8217; index could reach 28. archive_read_support_format_rar.c 2753<\/li>\n<li>V557 Array overrun is possible. The value of &#8216;lensymbol&#8217; index could reach 28. archive_read_support_format_rar.c 2754<\/li>\n<li>V557 Array overrun is possible. The value of &#8216;offssymbol&#8217; index could reach 60. archive_read_support_format_rar.c 2797<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0423\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v773\/\">V773<\/a> The function was exited without releasing the &#8216;testRun&#8217; pointer. A memory leak is possible. cmCTestMultiProcessHandler.cxx 193  <\/p>\n<pre><code class=\"cpp\">void cmCTestMultiProcessHandler::FinishTestProcess(cmCTestRunTest* runner,                                                    bool started) {   ....   delete runner;   if (started) {     this-&gt;StartNextTests();   } }  bool cmCTestMultiProcessHandler::StartTestProcess(int test) {   ....   cmCTestRunTest* testRun = new cmCTestRunTest(*this);    \/\/ &lt;=   ....   if (testRun-&gt;StartTest(this-&gt;Completed, this-&gt;Total)) {       return true;                                        \/\/ &lt;=     }   }    this-&gt;FinishTestProcess(testRun, false);                \/\/ &lt;=   return false; }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0430\u043c\u044f\u0442\u044c \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e <i>testRun <\/i> \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>testRun-&gt;StartTest<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>true<\/i>. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0442\u0432\u0438 \u043a\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e <i>testRun <\/i> \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>this-&gt; FinishTestProcess<\/i>.<\/p>\n<h2>\u0423\u0442\u0435\u0447\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v773\/\">V773<\/a> The function was exited without closing the file referenced by the &#8216;fd&#8217; handle. A resource leak is possible. rhash.c 450  <\/p>\n<pre><code class=\"cpp\">RHASH_API int rhash_file(....) {   FILE* fd;   rhash ctx;   int res;    hash_id &amp;= RHASH_ALL_HASHES;   if (hash_id == 0) {     errno = EINVAL;     return -1;   }    if ((fd = fopen(filepath, \"rb\")) == NULL) return -1;    if ((ctx = rhash_init(hash_id)) == NULL) return -1;  \/\/ &lt;= fclose(fd); ???    res = rhash_file_update(ctx, fd);   fclose(fd);    rhash_final(ctx, result);   rhash_free(ctx);   return res; }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u0421\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v590\/\">V590<\/a> Consider inspecting the &#8216;* s != &#8216;\\0&#8217; &amp;&amp; * s == &#8216; &#187; expression. The expression is excessive or contains a misprint. archive_cmdline.c 76  <\/p>\n<pre><code class=\"cpp\">static ssize_t get_argument(struct archive_string *as, const char *p) {   const char *s = p;    archive_string_empty(as);    \/* Skip beginning space characters. *\/   while (*s != '\\0' &amp;&amp; *s == ' ')     s++;   .... }<\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 <i>*s<\/i> \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0443\u043b\u0451\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u043c. \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0446\u0438\u043a\u043b\u0430 <i>while <\/i> \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0440\u0430\u0432\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0440\u043e\u0431\u0435\u043b\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442. \u042d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u043e \u043b\u0438\u0448\u043d\u0435\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v592\/\">V592<\/a> The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present. cmCTestTestHandler.cxx 899  <\/p>\n<pre><code class=\"cpp\">void cmCTestTestHandler::ComputeTestListForRerunFailed() {   this-&gt;ExpandTestsToRunInformationForRerunFailed();    ListOfTests finalList;   int cnt = 0;   for (cmCTestTestProperties&amp; tp : this-&gt;TestList) {     cnt++;      \/\/ if this test is not in our list of tests to run, then skip it.     if ((!this-&gt;TestsToRun.empty() &amp;&amp;          std::find(this-&gt;TestsToRun.begin(), this-&gt;TestsToRun.end(), cnt) ==            this-&gt;TestsToRun.end())) {       continue;     }      tp.Index = cnt;     finalList.push_back(tp);   }   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043e \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0438. \u0412\u0440\u043e\u0434\u0435, \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0443\u0442 \u043d\u0435\u0442 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438. \u041d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u044d\u0442\u043e\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>continue <\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0441\u0442\u043e\u0432 <i>this-&gt;TestsToRun<\/i> \u043d\u0435 \u043f\u0443\u0441\u0442 \u0438 <i>cnt <\/i> \u0432 \u043d\u0451\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0443\u0441\u0442, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0438\u043c:  <\/p>\n<pre><code class=\"cpp\">if (this-&gt;TestsToRun.empty() ||     std::find(this-&gt;TestsToRun.begin(), this-&gt;TestsToRun.end(), cnt) ==       this-&gt;TestsToRun.end()) {   continue; }<\/code><\/pre>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v592\/\">V592<\/a> The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present. cmMessageCommand.cxx 73  <\/p>\n<pre><code class=\"cpp\">bool cmMessageCommand::InitialPass(std::vector&lt;std::string&gt; const&amp; args,                                    cmExecutionStatus&amp;) {   ....   } else if (*i == \"DEPRECATION\") {     if (this-&gt;Makefile-&gt;IsOn(\"CMAKE_ERROR_DEPRECATED\")) {       fatal = true;       type = MessageType::DEPRECATION_ERROR;       level = cmake::LogLevel::LOG_ERROR;     } else if ((!this-&gt;Makefile-&gt;IsSet(\"CMAKE_WARN_DEPRECATED\") ||                 this-&gt;Makefile-&gt;IsOn(\"CMAKE_WARN_DEPRECATED\"))) {       type = MessageType::DEPRECATION_WARNING;       level = cmake::LogLevel::LOG_WARNING;     } else {       return true;     }     ++i;   }   .... }<\/code><\/pre>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e \u0442\u0443\u0442 \u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>IsSet(\u00abCMAKE_WARN_DEPRECATED\u00bb)<\/i> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>CMAKE_WARN_DEPRECATED<\/i> \u0437\u0430\u0434\u0430\u043d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>IsOn(\u00abCMAKE_WARN_DEPRECATED\u00bb)<\/i> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u043c, \u0442.\u043a. \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>type <\/i> \u0438 <i>level<\/i>.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v728\/\">V728<\/a> An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. cmCTestRunTest.cxx 151  <\/p>\n<pre><code class=\"cpp\">bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) {   ....   } else if ((success &amp;&amp; !this-&gt;TestProperties-&gt;WillFail) ||              (!success &amp;&amp; this-&gt;TestProperties-&gt;WillFail)) {     this-&gt;TestResult.Status = cmCTestTestHandler::COMPLETED;     outputStream &lt;&lt; \"   Passed  \";   }   .... }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">} else if (success != this-&gt;TestProperties-&gt;WillFail) {     this-&gt;TestResult.Status = cmCTestTestHandler::COMPLETED;     outputStream &lt;&lt; \"   Passed  \"; }<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c:<\/p>\n<ul>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; B) || (!A &amp;&amp; !B)&#8217; expression is equivalent to the &#8216;bool(A) == bool(B)&#8217; expression. cmCTestTestHandler.cxx 702<\/li>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. digest_sspi.c 443<\/li>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. tcp.c 1295<\/li>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. testDynamicLoader.cxx 58<\/li>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. testDynamicLoader.cxx 65<\/li>\n<li>V728 An excessive check can be simplified. The &#8216;(A &amp;&amp; !B) || (!A &amp;&amp; B)&#8217; expression is equivalent to the &#8216;bool(A) != bool(B)&#8217; expression. testDynamicLoader.cxx 72<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0420\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v523\/\">V523<\/a> The &#8216;then&#8217; statement is equivalent to the subsequent code fragment. archive_read_support_format_ar.c 415  <\/p>\n<pre><code class=\"cpp\">static int _ar_read_header(struct archive_read *a, struct archive_entry *entry,   struct ar *ar, const char *h, size_t *unconsumed) {   ....   \/*    * \"__.SYMDEF\" is a BSD archive symbol table.    *\/   if (strcmp(filename, \"__.SYMDEF\") == 0) {     archive_entry_copy_pathname(entry, filename);     \/* Parse the time, owner, mode, size fields. *\/     return (ar_parse_common_header(ar, entry, h));   }    \/*    * Otherwise, this is a standard entry.  The filename    * has already been trimmed as much as possible, based    * on our current knowledge of the format.    *\/   archive_entry_copy_pathname(entry, filename);   return (ar_parse_common_header(ar, entry, h)); }<\/code><\/pre>\n<p>  \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0434\u0432\u0443\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c, \u0443\u0434\u0430\u043b\u0438\u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043b\u0438\u0431\u043e \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 \u0435\u0451 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v535\/\">V535<\/a> The variable &#8216;i&#8217; is being used for this loop and for the outer loop. Check lines: 2220, 2241. multi.c 2241  <\/p>\n<pre><code class=\"cpp\">static CURLMcode singlesocket(struct Curl_multi *multi,                               struct Curl_easy *data) {   ....   for(i = 0; (i&lt; MAX_SOCKSPEREASYHANDLE) &amp;&amp;                           \/\/ &lt;=         (curraction &amp; (GETSOCK_READSOCK(i) | GETSOCK_WRITESOCK(i)));       i++) {     unsigned int action = CURL_POLL_NONE;     unsigned int prevaction = 0;     unsigned int comboaction;     bool sincebefore = FALSE;      s = socks[i];      \/* get it from the hash *\/     entry = sh_getentry(&amp;multi-&gt;sockhash, s);      if(curraction &amp; GETSOCK_READSOCK(i))       action |= CURL_POLL_IN;     if(curraction &amp; GETSOCK_WRITESOCK(i))       action |= CURL_POLL_OUT;      actions[i] = action;     if(entry) {       \/* check if new for this transfer *\/       for(i = 0; i&lt; data-&gt;numsocks; i++) {                            \/\/ &lt;=         if(s == data-&gt;sockets[i]) {           prevaction = data-&gt;actions[i];           sincebefore = TRUE;           break;         }       }     }   .... }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>i <\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0430\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0443\u043b\u044f \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u043e \u043a\u043e\u0434 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v519\/\">V519<\/a> The &#8216;tagString&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 84, 86. cmCPackLog.cxx 86  <\/p>\n<pre><code class=\"cpp\">oid cmCPackLog::Log(int tag, const char* file, int line, const char* msg,                      size_t length) {   ....   if (tag &amp; LOG_OUTPUT) {     output = true;     display = true;     if (needTagString) {       if (!tagString.empty()) {         tagString += \",\";       }       tagString = \"VERBOSE\";     }   }   if (tag &amp; LOG_WARNING) {     warning = true;     display = true;     if (needTagString) {       if (!tagString.empty()) {         tagString += \",\";       }       tagString = \"WARNING\";     }   }   .... }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>tagString <\/i> \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0432 \u0447\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0430, \u0438\u043b\u0438 \u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b &#8216;=&#8217; \u0438 &#8216;+=&#8217;.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442:<\/p>\n<ul>\n<li>V519 The &#8216;tagString&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 94, 96. cmCPackLog.cxx 96<\/li>\n<li>V519 The &#8216;tagString&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 104, 106. cmCPackLog.cxx 106<\/li>\n<li>V519 The &#8216;tagString&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 114, 116. cmCPackLog.cxx 116<\/li>\n<li>V519 The &#8216;tagString&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 125, 127. cmCPackLog.cxx 127<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v519\/\">V519<\/a> The &#8216;aes-&gt;aes_set&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 4052, 4054. archive_string.c 4054  <\/p>\n<pre><code class=\"cpp\">int archive_mstring_copy_utf8(struct archive_mstring *aes, const char *utf8) {   if (utf8 == NULL) {     aes-&gt;aes_set = 0;            \/\/ &lt;=   }   aes-&gt;aes_set = AES_SET_UTF8;   \/\/ &lt;=   ....   return (int)strlen(utf8); }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>AES_SET_UTF8<\/i> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u042f \u0434\u0443\u043c\u0430\u044e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432\u0432\u0435\u0434\u0451\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0441\u044f \u0441 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0449\u0451 \u0432 \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e:<\/p>\n<ul>\n<li>V519 The &#8216;aes-&gt;aes_set&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 4066, 4068. archive_string.c 4068<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 CMake<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 CMake \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio.<\/p>\n<p>  <b>Windows\/Visual Studio<\/b><\/p>\n<p>  \u0414\u043b\u044f Visual Studio \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake GUI \u0438\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:  <\/p>\n<pre><code class=\"cpp\">cmake -G \"Visual Studio 15 2017 Win64\" ..<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c .sln \u0444\u0430\u0439\u043b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=EvgeniyRyzhkov.PVS-Studio\">\u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/a> \u0434\u043b\u044f Visual Studio.<\/p>\n<p>  <b>Linux\/macOS<\/b><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b compile_commands.json. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u0412 CMake \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On ..<\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441 .json \u0444\u0430\u0439\u043b\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">pvs-studio-analyzer analyze -l \/path\/to\/PVS-Studio.lic   -o \/path\/to\/project.log -e \/path\/to\/exclude-path -j&lt;N&gt;<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f CMake-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. CMake-\u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub: <a href=\"https:\/\/github.com\/viva64\/pvs-studio-cmake-examples\">pvs-studio-cmake-examples<\/a>.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 CMake \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u043e \u0440\u0435\u043b\u0438\u0437\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430, \u043a\u0430\u043a <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio\/\">PVS-Studio<\/a>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043d\u043e \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C \u0438 C++, \u0442\u043e \u0445\u043e\u0447\u0443 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0449\u0451 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C# \u0438 Java. \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u043d\u0430 <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/\">\u044d\u0442\u0443<\/a> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p><a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/464145\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/898\/3b6\/5a7\/8983b65a74adb29a2113eba12fbec3f1.png\" align=\"left\"><\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Svyatoslav Razmyslov. <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/464145\/\">CMake: the Case when the Project&#8217;s Quality is Unforgivable<\/a>.<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/464147\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/464147\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c40\/4a5\/994\/c404a599454444ac3e9021195c5b3c3c.png\" alt=\"Picture 1\"><\/div>\n<p>  CMake \u2014 \u044d\u0442\u043e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u042d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 PVS-Studio, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0449\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u043a\u043e\u0434\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u0448\u0438\u0431\u043e\u043a, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u043d\u043e\u0433\u043e. \u0410\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f CMake \u043e\u0433\u0440\u043e\u043c\u043d\u0430. \u041d\u0430 \u043d\u0451\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435. \u0421\u0442\u0440\u0430\u0448\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0443 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-293553","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293553","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=293553"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/293553\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=293553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=293553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=293553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}