Podczas kompilowania następujące C plik źródłowy ++ w Visual Studio 2010 z poziomu ostrzegawczego/W4 włączonaVisual Studio 2010 (C++): stłumić C4706 ostrzeżenie tymczasowo
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
if (result = strcmp(str0, str1)) // line 11
{
printf("Strings are different\n");
}
}
uzyskać następujące ostrzeżenie
warning C4706: przypisanie wewnątrz wyrażenia warunkowego
dla linii 11.
Chcę ukryć to ostrzeżenie dokładnie w tym miejscu. Więc próbowałem Google i znalazłem tę stronę: http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx
więc zmieniłem kod na następujące - w nadziei, że to rozwiąże problem:
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
#pragma warning(pop)
{
printf("Strings are different\n");
}
}
Nie pomogło.
Ten wariant nie pomogło:
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
{
#pragma warning(pop)
printf("Strings are different\n");
}
}
Aby uniknąć jedną dodatkową ofertę: czyściłem rozwiązanie przed każdym kompilacji. To prawdopodobnie nie jest wina.
Podsumowując: w jaki sposób mogę tłumić C4706 dokładnie w tym miejscu?
Edit Tak, przepisywanie jest możliwe - ale naprawdę chcę wiedzieć, dlaczego sposób staram się tłumić ostrzeżenie (który jest oficjalnie udokumentowane na MSDN) nie działa - gdzie jest błąd?
Większość kompilatorów wdrożenia „Czy na pewno” czynnik poprzez wymaganie dodatkową parę wsporników, życzę MSVC mógł zrobić to samo. – Thomas