Visual Studio 2010 (C++):暂时抑制 C4706 警告

2024-05-27

当您在 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 上正式记录)不起作用 - 错误在哪里?


不要试图隐藏你的警告,而是修复它所抱怨的问题 http://msdn.microsoft.com/en-us/library/7hw7c1he%28v=vs.80%29.aspx;您的赋值有一个可以在另一个表达式中合法使用的值(赋值左侧的值)。

您可以通过显式测试分配的结果来解决此问题:

if ((result = strcmp(str0, str1)) != 0) 
{
    printf("Strings are different\n");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2010 (C++):暂时抑制 C4706 警告 的相关文章

随机推荐