Подтвердить что ты не робот

Как бороться с предупреждением 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 параметры, которые были случайно изменены. Или как я должен справиться с этим предупреждением? Спасибо вам всем.

4b9b3361

Ответ 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 */