Visual Studio 2015 string.h противоречивые аннотации
Я использую Visual Studio 2015, и я также установил (и переустановил) последний SDK. Я запустил новый проект и установил уровень предупреждения, я также установил "Обрабатывать предупреждения как ошибки" и настроил запуск статического анализа кода при сборке. Простой main.c, который содержит следующий код, выведет несколько интересных предупреждений аннотации SAL.
код:
// main.c
#include <Windows.h>
#include <stdio.h>
int main()
{
printf("wtf?");
return 0;
}
Ошибка вывода:
c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\string.h(130): warning C28252: Inconsistent annotation for 'strcpy': _Param_(1) has 'SAL_writableTo(elementCount(_String_length_(__formal(1,parameter1))+1))' on the prior instance. See <no file>(0).
c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\string.h(130): warning C28253: Inconsistent annotation for 'strcpy': _Param_(1) has 'SAL_writableTo(elementCount(_String_length_(_Source)+1))' on this instance. See <no file>(0).
Дополнительные замечания:
- обнаружил, что это происходит только в сборках релиза (в Debug он работает просто отлично)
- также происходит, только если источником является.c (отлично работает в обоих релизах / отладках с.cpp)
Решения до сих пор пробовали:
- Переустановка visual studio 2015 + sdk
- попытался #pragma предупреждение (подавить:28253) внутри заголовка de string.h, но это не позволило мне изменить этот заголовок
В нескольких сообщениях об ошибках / билетах я обнаружил, что какой-то чувак из Microsoft сказал, что это исправлено в последней версии SDK, а также разместил ссылку на страницу загрузки для сообщества vs2015 (которую я перезагружал и переустанавливал еще раз), но это все еще не кажется работать (для меня по крайней мере
Я, вероятно, сейчас продолжу проект без "Обращаться с предупреждениями как с ошибками", но я был бы очень признателен, если бы somenoe смог дать мне элегантное решение без мелких взломов / обходных путей.
Заранее спасибо, ура!
ОБНОВЛЕНИЕ 1 Временное решение:
#define SAFE_INCLUDE_GUARD_BEGIN __pragma(warning(push)) \
__pragma(warning(disable:28253)) \
__pragma(warning(disable:28252))
#define SAFE_INCLUDE_GUARD_END __pragma(warning(pop))
SAFE_INCLUDE_GUARD_BEGIN
// broken microsoft header includes go here ( like Windows.h, etc )
SAFE_INCLUDE_GUARD_END