int main() {
#pragma warning(push)
#pragma warning(disable: 4101)
int i;
#pragma warning(pop)
}
########################### ИЛИ #################### ########
int main() {
#pragma warning(suppress: 4101)
int i;
}
Я считаю, что любой из них должен компилироваться в Visual Studio 2013 с предупреждениями, рассматриваемыми как ошибки, без предупреждения C4101 (о том, что I является локальной переменной без ссылки). Это предупреждение уровня 4.
Но, это все еще дает мне предупреждение. Даже если я отключу предупреждения, рассматриваемые как ошибки, он все равно выдает мне предупреждение, хотя затем компилируется, потому что ошибки нет.
Я не использую предварительно скомпилированные заголовки /stdafx.h. Я видел некоторые другие вопросы, в которых говорилось, что этот метод прагмы будет работать с реальным кодом (возможно, они имели в виду код в заголовках, но не указывали или не выглядели так). Некоторые другие расплывчато говорят без объяснения причин, что любые команды #pragma до stdafx.h будут игнорироваться. Но 'https://msdn.microsoft.com/en-us/library/d9x1s805(v=vs.120).aspx' специально упоминает прагму, которая может быть в исходном коде для переопределения параметров компилятора. Конечно, я никогда не пользовался stdafx.h, будучи скорее парнем из Unix, так что, возможно, есть что-то совершенно фундаментальное, чего мне совершенно не хватает.
Я пытался указать C4101 вместо 4101, и он не может обрабатывать там альфу. Я попытался указать предупреждение #pragma (push 2), хотя это приведет к попаданию всех предупреждений уровня 3 и 4, которые я не хочу делать, и даже это по-прежнему дает предупреждение уровня 4.
Вот мои параметры командной строки компилятора: /MP /GS /W4 /Zc:wchar_t /Zi /Gm- /Od /sdl /Fd"<...>\pragmaWarning\Intermediate\vc120.pdb" /fp:precise /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /Fa"<...>\pragmaWarning\Intermediate\" /EHsc /nologo /Fo"<...>\pragmaWarning\Intermediate\" /Fp"<...>\pragmaWarning\Intermediate\pragmaWarning.pch"
Как видите, эти параметры командной строки пропускают предупреждения, рассматриваемые как ошибки.