У VC++ есть предупреждение C26495 (MEMBER_UNINIT) (члены класса не инициализированы в конструкторе). Компилирую версией 19.28 (из VS, обновленной пару месяцев назад) тестовый файл, в котором конструктор не инициализирует ни одного из членов — ни ошибок, ни предупреждений нет. Как заставить это предупреждение работать?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>У VC++ есть предупреждение C26495 (MEMBER_UNINIT) (члены класса не инициализированы в конструкторе). Компилирую версией 19.28 (из VS, обновленной пару месяцев назад) тестовый файл, в котором конструктор не инициализирует ни одного из членов — ни ошибок, ни предупреждений нет. Как заставить это предупреждение работать?
Warning Level 4? Должно вроть помочь...
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Я не из-под студии, из командной строки. Ключ /analyze тоже не помогает.
У меня получилось из коммандной строки так:
D:\Temp>type test.cpp
struct S
{
S() {}
int i;
};
int main()
{
S s;
return s.i;
}
D:\Temp>set esp.extensions=cppcorecheck.dll
D:\Temp>cl /analyze /analyze:plugin EspXEngine.dll test.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29337 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test.cpp
D:\Temp\test.cpp(3) : warning C26455: Default constructor may not throw. Declare it 'noexcept' (f.6).
D:\Temp\test.cpp(3) : warning C26495: Variable 'S::i' is uninitialized. Always initialize a member variable (type.6).
D:\Temp\test.cpp(10) : warning C26496: The variable 's' is assigned only once, mark it as const (con.4).
Microsoft (R) Incremental Linker Version 14.28.29337.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
Здравствуйте, Alexander G, Вы писали:
AG>У меня получилось из коммандной строки так: AG>D:\Temp>set esp.extensions=cppcorecheck.dll AG>D:\Temp>cl /analyze /analyze:plugin EspXEngine.dll test.cpp
Ага, спасибо, так работает, даже без esp.extensions.
Вот что им мешало в описаниях предупреждений указать, какие плагины их выдают?