почему макрос _Printf_format_string_ не выдает никаких предупреждений? - PullRequest
0 голосов
/ 22 февраля 2019

В следующем фрагменте неправильное использование спецификаторов формата внутри вызова MyFormat () должно выдавать предупреждение в соответствии со спецификациями SAL, и если я раскомментирую идентичный вызов printf (), я действительно получу все эти предупреждения, номой код скомпилирован тихо даже с / W4.Что я делаю неправильно?Я использую MSVC 2017 15.9.7 Community Edition.

#include <stdio.h>
#include <stdarg.h>

void MyFormat(_Printf_format_string_ const char *fmt, ...)
{
   va_list va;
   va_start(va, fmt);
   vprintf(fmt, va);
   va_end(va);
}

int main()
{
   MyFormat("blabla %s\n", L"qq");
   // printf("blabla %s\n", L"qq");
   return 0;
}

1 Ответ

0 голосов
/ 07 марта 2019

Добавление флага /analyze приведет к тому, что выдаст предупреждение .Однако это другое (и, на мой взгляд, низшее) предупреждение, чем то, что вы получите от printf.К сожалению, я не могу найти способ сделать пользовательскую функцию для создания такого стиля предупреждения.

...