【问题标题】:How to deal with Warning C4100 in Visual Studio 2008如何处理 Visual Studio 2008 中的警告 C4100
【发布时间】:2011-01-31 23:14:08
【问题描述】:

出于某种原因,我的 Visual Studio 2008 开始显示以下代码的警告: “int main(int argc, char **argv)”,真的很烦人。

详细的警告输出是(您可以忽略行号):
1>.\main.cpp(86) : 警告 C4100: 'argv' : 未引用的形式参数
1>.\main.cpp(86) : 警告 C4100: 'argc' : 未引用的形式参数

我想知道 Visual Studio 2008 中是否存在意外更改的设置。或者我应该如何处理这个警告?

【问题讨论】:

    标签: c++ visual-studio


    【解决方案1】:

    如果参数未引用,您可以不命名:

    int main(int, char**)
    {
    }
    

    而不是

    int main(int argc, char** argv)
    {
    }
    

    如果您真的只想抑制警告,可以使用编译器的/wd4100 命令行选项或在代码中使用#pragma warning(disable: 4100)

    这是 4 级警告;如果您在较低的警告级别编译,您将不会收到此警告。警告级别在项目属性中设置(右键项目,选择属性;在配置属性->C++->常规,设置“警告级别”)。

    【讨论】:

    • VS2008有什么设置可以玩吗?因为对于我之前编写的代码,这个 C4100 警告确实会在我编译它们时出现。谢谢。
    • @Jimmie:是的;您可以将项目的警告级别更改为较低的警告级别(例如 3 级)。
    • 请注意,在函数定义中有未命名的参数在 C++ 中是可以的,但如果您编译为 C 则会出现错误(在尝试编写任何一种方式编译的代码时,有时会有点恼火)。
    【解决方案2】:

    如果您不使用命令行参数,那么 main 的另一个标准签名是:

    int main();
    

    【讨论】:

    • 另一个标准签名在这些括号之间有一个空格,不是吗?
    • 是的,在 C 中; C++ 没有区别,因为它们是等价的。问题被标记为 C++,所以我采用了我通常在 C++ 中使用的无参数形式。
    【解决方案3】:

    警告 C4100 是在警告级别 4 发出的,这不是默认的,所以在某些时候有人可能会为您的项目更改它。

    您可以改回警告级别,或者更直接地处理警告。

    作为James McNellis said,您可以通过从参数列表中删除参数名称来消除 C++ 中的警告。但是,如果代码将被编译为 C 代码,那么在这种情况下会出现错误。

    Windows 标头定义了宏 UNREFERENCED_PARAMETER() 以帮助处理此警告。你可以使用

    UNREFERENCED_PARAMETER( argc);
    UNREFERENCED_PARAMETER( argv);
    

    使警告静音。如果您不想包含 Windows 标头,宏只需扩展为在无操作表达式中使用参数名称:

    #define UNREFERENCED_PARAMETER(P)          \
        /*lint -save -e527 -e530 */ \
        { \
            (P) = (P); \
        } \
        /*lint -restore */
    

    【讨论】:

    • 我不知道UNREFERENCED_PARAMETER;很高兴知道。在 Windows 标头中,有两个版本。默认启用的只是扩展为(P)。您引用的另一个扩展为(P) = (P);,如果定义了lint,则使用它;这对于 const 限定或不可分配类型的参数将失败。
    • @James - 更“复杂”的定义正是我的 ctags 跳转发生的地方(我应该向上滚动一点 - 特别是因为我有点惊讶于扩展不仅仅是(P))。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多