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

===============>>#1 票数:6 已采纳

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

这可能很棘手-您需要启用所有警告-使用/ Wall可以启用许多警告,因此看到警告发生时可能会有一些麻烦,但是确实如此。

===============>>#2 票数:3

您可以使用/ W [level] [code]更改任何特定警告的级别。 因此,在这种情况下,/ W34365会将警告4365变为3级警告。 如果您经常这样做,可能会发现将这些选项放在文本文件中并使用@ [file]选项简化命令行非常有用。

===============>>#3 票数:0

@quamrana:

/ Wall选项之外必须有其他东西才能启用警告4365:

C:\Temp>cl /Wall /c foo.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

foo.c
foo.c(6) : warning C4018: '<' : signed/unsigned mismatch

我看到安德鲁让它起作用了,但是有人知道为什么它在这里不起作用吗?

Visual Studio文档指示应该这样做,但我什至无法在文档中获得示例程序来发出C4365警告(尽管它确实给出了相关的C4245警告-但这还是只带有/ W4选项)。

  ask by Andrew Grant translate from so

未解决问题?本站智能推荐:

1回复

如何在VS 2017中从其他编译器编译代码[关闭]

我已经下载了源代码,无法了解如何在VS 2017中编译/打开它。它应该很简单,但是在创建新项目之前没有任何作用。 如果我只是在VS中打开一个C文件,它只会向我显示该文件,并且无法运行它。 想象一下,我用C语言编写了一个简单的Hello World,并且有了C语言文件。 如何在VS中打开并运
3回复

使MSVC编译器GCC兼容?

有没有办法使msvc编译器像gcc一样严格? MSVC让我做一些非常疯狂的事情,当我在linux中编译时会导致数百个错误。 谢谢
2回复

如何在VS2008中指定64位无符号int const 0x8000000000000000?

我读了关于整数常量的Microsoft特定后缀“i64”。 我想做一个UNSLigned转到ULONGLONG。 ULONGLONG bigNum64 = 0x800000000000000i64 >> myval; 在正常的C中,我会使用后缀“U”,例如类似的32位操作
3回复

使用C ++编译器编译C99文件

还没有找到我要求谷歌或这里的确切问题,一切都谈到想要从c代码调用c ++或者用c编译器和其他一些用c ++编译的一些部分然后将它们链接在一起以及由此产生的问题这是我不想要的。 我想在我的所有C ++应用程序中使用Visual Studio的C ++编译器编译和链接C99文件,并且能够在没有
1回复

当“编译为”设置为“默认”时,外部符号链接错误

这个问题已经在这里有了答案: 将Cpp文件中使用的全局变量链接到cfile中定义的全局变量时,是否还需要extern“ C”? 2个答案 我使用的是Visual Studio2013。我在C源文件( file1.c )中声明了一个全局变量,并在C ++源文件( f
3回复

我应该下载哪个Clang编译器?

我想在我的系统上安装Clang compliler。 我去了这个链接 ,但有很多下载选项让我感到困惑,我应该下载哪个版本? 我正在使用戴尔的笔记本电脑:Windows 7 Basic 64位。 我已经安装了MinGW 4.5.0版。 我还安装了Visual Studio 2008以及
2回复

了解MSVS C ++编译器优化

我不明白这段代码中发生了什么。 C代码是: 我期望得到的程序集将是一些简单的移位和添加/子操作,但是有一些神奇的常量,如51EB851Fh ,乘法等。这里发生了什么?
1回复

矛盾的未解决的外部符号+未使用的库以及VS2017和FFMPEG 4

我在Windows中有一个FFmpeg 4.0.2的小型c ++项目。 但是,我有一个奇怪的问题:我正在x64中进行编译,具有x64库,并且具有正确的链接输入,但是在链接器输出/VERBOSE出现了LNK2019 error ,同时出现了“未使用的库”: 我手动检查了lib文件是x64
6回复

为什么运行时库是编译器选项而不是链接器选项?

我正在尝试使用visual studio 2005构建一个C / C ++静态库。由于运行时库的选择是一个编译选项,我不得不构建我的库的四个变体,一个用于运行时库的每个变体: / MT - 静态运行时库 / MD - DLL运行时库 / MTd - 调试静态运行时库
16回复

为什么没有人用高级功能升级C编译器?

在上面的代码段中,第一个声明出现错误。 但是,使用C ++编译器不会发生此错误。 在C ++中,我们不需要一次又一次地使用关键字struct。 那么为什么没有人更新他们的C编译器,以便我们可以像在C ++中那样使用不带关键字的结构? C编译器开发人员为什么不消除C的某些小故障(