c++ - 让 VS 编译器捕捉有符号/无符号的赋值?

标签 c++ c visual-studio

Visual Studio 编译器似乎不会对有符号/无符号赋值发出警告,只会在比较时发出警告。例如,下面的代码将在 if 语句而不是初始赋值上生成警告。

有没有办法让它捕捉到这些?我已经在 W4 但认为(希望)某处可能有另一个设置。

谢谢,

int foo(void)
{
    unsigned int fooUnsigned = 0xffffffff;
    int fooSigned = fooUnsigned; // no warning

    if (fooSigned < fooUnsigned) // warning
    {
        return 0;
    }

    return fooSigned;
}

更新:

Quamrana 是对的,这是由警告 4365 控制的,该警告似乎默认关闭,即使在 W4 时也是如此。但是,您可以像这样针对给定的警告级别明确启用它;

#pragma warning (4 : 4365)

结果是;

warning C4365: 'initializing' : conversion from 'unsigned int' to 'int', signed/unsigned mismatch

最佳答案

您需要启用警告 4365 才能捕获分配。

这可能很棘手 - 您需要启用所有警告 - 使用/Wall 启用大量警告,因此您可能很难看到警告发生,但它确实发生了。

关于c++ - 让 VS 编译器捕捉有符号/无符号的赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75385/

相关文章:

c# - 单击按钮为计时器添加时间

c++ - 为什么 Windows Defender 扫描我的代码?

c++函数名称歧义

c++ - boost::log (boost logging): BOOST_LOG_FUNCTION 仅适用于主线程

c - 为什么会出现segmentation Fault错误

c - 如何创建一个基本的操作系统

c++ - Windows 编译器上的 timespec

c++ - 编译器 (gcc) 可以保证 c++ 循环吗?

c++ - NodeJS 和 N-API

c - RSA 加密的 OpenSSL 可变长度结果 [C 编程]