如何在Visual Studio 2008中处理警告C4100

时间:2010-03-25 22:22:07

标签: c++ visual-studio

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

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

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

3 个答案:

答案 0 :(得分:20)

如果参数未被引用,您可以将它们保留为未命名:

int main(int, char**)
{
}

而不是

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

如果您真的想要禁止警告,可以使用编译器的/wd4100命令行选项或在代码中使用#pragma warning(disable: 4100)来执行此操作。

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

答案 1 :(得分:5)

如果您没有使用命令行参数,那么main的其他标准签名是:

int main();

答案 2 :(得分:4)

警告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 */