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