Почему макрос _Printf_format_string_ не выдает никаких предупреждений?
В следующем фрагменте неправильное использование спецификаторов формата в вызове 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;
}
2 ответа
Добавление /analyze
флаг заставит это произвести предупреждение. Однако это другое (и, на мой взгляд, низшее) предупреждение, чем то, что вы получите от printf
, К сожалению, я не могу найти способ сделать пользовательскую функцию для создания такого стиля предупреждения.
Только что сам прошел через эту головную боль, и для меня это было потому, что все предупреждения были явно отключены. (например, 6340, 6284, 6273.) printf выдает различные предупреждения (4477), которые не были отключены.
Не видя полной командной строки OP, невозможно узнать, была ли это их проблема, но всем, кто сталкивался с этим: проверьте свои флаги /wd.