Как правильно использовать «анализ кода» в Visual Studio 2010 для C ++? - PullRequest
5 голосов
/ 16 марта 2011

Если я устанавливаю свежую копию Windows 7 и Visual Studio 2010 Premium SP1, создайте созданное мастером «консольное приложение C ++» и добавьте 3 заголовка в файл .cpp:

#include <winsock2.h>
#include <WS2tcpip.h>
#include <wspiapi.h>

Выполнение «Run Code Analysis» покажет мне предупреждения в коде Microsoft (сам проект генерируется мастером, поэтому ошибок нет):

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2tcpip.h(729): warning C6386: Buffer overrun: accessing 'argument 1', the writable size is '1*4' bytes, but '4294967272' bytes might be written: Lines: 703, 704, 705, 707, 713, 714, 715, 720, 721, 722, 724, 727, 728, 729
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wspiapi.h(294): warning C6386: Buffer overrun: accessing 'argument 1', the writable size is '1' bytes, but '1025' bytes might be written: Lines: 263, 264, 265, 267, 268, 270, 271, 273, 294
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wspiapi.h(236): warning C6387: '*pptResult' might be '0': this does not adhere to the specification for the function 'WspiapiQueryDNS': Lines: 263, 264, 265, 267, 268, 270, 271, 273, 294, 296
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wspiapi.h(687): warning C6387: 'argument 1' might be '0': this does not adhere to the specification for the function 'WspiapiLegacyFreeAddrInfo': Lines: 504, 505, 506, 507, 508, 509, 510, 512, 513, 514, 515, 516, 520, 528, 532, 538, 550, 551, 555, 556, 560, 563, 568, 575, 577, 578, 589, 591, 592, 593, 596, 598, 599, 600, 604, 607, 610, 611, 627, 662, 664, 680, 685, 687
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wspiapi.h(481): warning C6387: '*pptResult' might be '0': this does not adhere to the specification for the function 'WspiapiLegacyGetAddrInfo': Lines: 504, 505, 506, 507, 508, 509, 510, 512, 513, 514, 515, 516, 520, 528, 532, 538, 550, 551, 555, 556, 560, 563, 568, 575, 577, 578, 589, 591, 592, 593, 596, 598, 599, 600, 604, 607, 610, 611, 627, 662, 664, 680, 685, 687, 688, 691

Это делает анализ кода непригодным для больших проектов - я получаю тысячи предупреждений в заголовочных файлах Microsoft и не могу найти среди них свои собственные предупреждения :(. Есть ли способ исключить заголовки Microsoft SDK из анализа кода, будет использоваться?

P.S. Я знаю, что C ++ не очень хорошо поддерживается для Visual Studio, но я не могу изменить язык из-за существующих проектов, которые мне нужно поддерживать и улучшать: (.

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Вы можете отключить предупреждения анализа кода для заголовочных файлов, которые не были предварительно очищены с помощью warning() #pragma:

#include <codeanalysis\warnings.h>
#pragma warning(push)
#pragma warning (disable: ALL_CODE_ANALYSIS_WARNINGS)

// include headers

#pragma warning(pop)
0 голосов
/ 19 мая 2016

Вы пытались использовать переменную среды CAExcludePath?удалить те каталоги, которые содержат системный заголовок?

CAExcludePath='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt;c:\program files (x86)\microsoft visual studio 14.0\vc\include;c:\program files (x86)\windows kits\8.1\include\um;c:\program files (x86)\microsoft visual studio 14.0\vc\include\sys;'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...