出于某种原因,我的Visual Studio 2008开始显示以下代码的警告: “int main(int argc,char ** argv)”,这真的很烦人。
详细的警告输出(您可以忽略行号):
1>。\ main.cpp(86):警告C4100:'argv':未参考形式参数
1>。\ main.cpp(86):警告C4100:'argc':未引用的形式参数
我想知道Visual Studio 2008中是否有意外更改的设置。或者我该如何处理这个警告?
答案 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 */