当您在 Visual Studio 2010 中编译以下 C++ 源文件并启用警告级别 /W4 时
#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");
}
}
您会收到以下警告
警告 C4706:条件表达式内的赋值
对于 11 号线。
我想在这个地方抑制这个警告。所以我尝试谷歌并找到了这个页面:http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx
所以我将代码更改为以下内容 - 希望这能解决问题:
#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");
}
}
这没有帮助。
这个变体也没有帮助:
#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");
}
}
为了避免进一步询问:我在每次编译之前都清理了解决方案。所以这可能不是错误。
所以总而言之:我如何在这个地方精确地抑制C4706?
Edit是的,重写是可能的 - 但我真的想知道为什么我尝试抑制警告的方式(在 MSDN 上正式记录)不起作用 - 错误在哪里?