开发者

How to deal with Warning C4100 in Visual Studio 2008

For some reason my Visual Studio 2008 began to show warnings for code like: "int main( int argc, char **argv)", which is really annoying.

The detailed warning ouputs are (you can ignore the line numbers):

1>.\main.cpp(86) : warning C4100:开发者_如何学运维 'argv' : unreferenced formal parameter

1>.\main.cpp(86) : warning C4100: 'argc' : unreferenced formal parameter

I wonder if there are settings in Visual Studio 2008 that have been accidentally changed. Or how should I deal with this warning?


If the parameters are unreferenced, you can leave them unnamed:

int main(int, char**)
{
}

instead of

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

If you really want just to suppress the warning, you can do so using the /wd4100 command line option to the compiler or using #pragma warning(disable: 4100) in your code.

This is a level 4 warning; if you compile at a lower warning level, you won't get this warning. The warning level is set in the project properties (right-click project, select Properties; on the Configuration Properties -> C++ -> General, set "Warning Level").


If you're not using the command line parameters then the other standard signature for main is:

int main();


Warning C4100 is issued at warning level 4 which is not default, so at some point someone probably changed it for your project.

You could change the warning level back, or address the warning more directly.

As James McNellis said, you can silence the warning in C++ by removing the parameter name from the parameter list. However, if the code will be compiled as C code you'll get an error in that case.

The Windows headers define the macro UNREFERENCED_PARAMETER() to help deal with this warning. You could use

UNREFERENCED_PARAMETER( argc);
UNREFERENCED_PARAMETER( argv);

to silence the warning. If you don't want to include windows headers, the macro simply expands to a use of the parameter name in a do nothing expression:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜