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

0 ответов

Другие вопросы по тегам