使 msvc C4706 消失,无需编译指示



MSVC 中的以下代码会生成有关条件表达式中赋值的警告。 https://godbolt.org/z/i_rwY9

int main()
{
int a;
if ((a = 5)) {
return 1;
}
return a;
}

请注意,我尝试在 if 周围使用双 ((,因为这会使 g++ 的警告消失,但我不知道如何在不从条件中提取赋值的情况下在 msvc 中使其消失。 有没有办法推动 msvc 弄清楚这个分配是故意的?

我知道我可以使用编译指示来禁用此警告,但模式非常常见,所以我希望获得一个没有编译指示的解决方案(如果存在(。

MSVC

编译器将给出此警告,除非你能说服它你确实知道你在做什么。添加至少一个"真实"逻辑测试将实现此目的:

int main()
{
int a;
if ((a = 5) != 0) {
return 1;
}
return a;
}

请注意,常量5可以很容易地替换为任何变量或有效表达式:添加显式!= 0测试不会实际更改代码的结果(并且不太可能更改生成的程序集(。