По некоторым причинам моя Visual Studio 2008 начала показывать предупреждения для кода как: "международное основное (интервал argc, символ ** argv)", который является действительно раздражающим.
Подробное предупреждение ouputs (можно проигнорировать номера строки):
1>. \main.cpp (86): предупреждение C4100: 'argv': не имеющий ссылки формальный параметр
1>. \main.cpp (86): предупреждение C4100: 'argc': не имеющий ссылки формальный параметр
Интересно, существуют ли настройки в Visual Studio 2008, которые были случайно изменены. Или как я должен иметь дело с этим предупреждением?
Если на параметры нет ссылок, вы можете оставить их безымянными:
int main(int, char**)
{
}
вместо
int main(int argc, char** argv)
{
}
. Если вы действительно хотите просто подавить предупреждение, вы можете сделать это, используя параметр командной строки / wd4100
для компилятора или используя #pragma warning (disable: 4100)
в вашем коде.
Это предупреждение уровня 4; если вы компилируете с более низким уровнем предупреждения, вы не получите это предупреждение. Уровень предупреждения устанавливается в свойствах проекта (щелкните правой кнопкой мыши проект, выберите «Свойства»; в «Свойства конфигурации» -> C ++ -> «Общие» установите «Уровень предупреждения»).
Если вы не используете параметры командной строки, то другая стандартная подпись для main:
int main();
Предупреждение C4100 выдается на уровне предупреждения 4, который не является значением по умолчанию, поэтому в какой-то момент кто-то, вероятно, изменил его для вашего проекта.
Вы можете вернуть уровень предупреждения или обратиться к предупреждению более прямо.
Как Джеймс МакНеллис сказал , вы можете отключить предупреждение в C ++, удалив имя параметра из списка параметров. Однако, если код будет скомпилирован как код C, в этом случае вы получите ошибку.
Заголовки Windows определяют макрос UNREFERENCED_PARAMETER ()
, помогающий справиться с этим предупреждением. Вы можете использовать
UNREFERENCED_PARAMETER( argc);
UNREFERENCED_PARAMETER( argv);
, чтобы отключить предупреждение. Если вы не хотите включать заголовки окон, макрос просто расширяется до использования имени параметра в выражении «ничего не делать»:
#define UNREFERENCED_PARAMETER(P) \
/*lint -save -e527 -e530 */ \
{ \
(P) = (P); \
} \
/*lint -restore */