2010-03-25 5 views
12

어떤 이유로 Visual Studio 2008에서 "int main (int argc, char ** argv)"과 같은 코드에 대한 경고를 표시하기 시작했습니다.Visual Studio 2008에서 경고 C4100을 처리하는 방법

세부 경고으로 출력한다은 (당신이 줄 번호를 무시할 수)입니다
1> \ MAIN.CPP (86). '는 argv': C4100 경고. 참조되지 않은 형식 매개 변수
1>을 \ MAIN.CPP (86) : 경고 C4100 : 'argc': 참조되지 않은 형식 매개 변수

실수로 변경된 Visual Studio 2008의 설정이 있는지 궁금합니다. 또는이 경고를 어떻게 처리해야합니까? 매개 변수가 참조되지 않은 경우

답변

18

, 당신은 이름을 남길 수 있습니다 :

int main(int, char**) 
{ 
} 

대신

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

을 당신이 정말로 단지 경고를 억제하려면, 그래서 /wd4100 명령을 사용하여 수행 할 수 있습니다 컴파일러에 줄 옵션을 사용하거나 코드에서 #pragma warning(disable: 4100)을 사용하십시오.

이것은 레벨 4 경고입니다. 낮은 경고 레벨로 컴파일하면이 경고가 표시되지 않습니다. 경고 수준은 프로젝트 속성에서 설정됩니다 (프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택하고 구성 속성 -> C++ -> 일반에서 "경고 수준"을 설정하십시오).

+0

VS2008에서 사용할 수있는 설정이 있습니까? 이전에 작성한 코드의 경우 C4100 경고가 표시되어 컴파일됩니다. 감사합니다. – Jimmie

+0

@ 지미 : 예; 프로젝트의 경고 레벨을 약간 낮은 경고 레벨 (예 : 레벨 3)로 변경할 수 있습니다. –

+3

함수 정의에서 명명되지 않은 매개 변수를 사용하면 C++에서 OK이지만 C로 컴파일하면 오류가 발생합니다 (어느 쪽이든 컴파일하는 코드를 작성하려고 할 때 가끔씩 작은 자극이 있음). –

4

경고 C4100은 기본값이 아니므로 경고 수준 4에서 발행되므로 누군가 프로젝트에서 변경했을 수 있습니다.

경고 수준을 뒤로 변경하거나 경고를보다 직접적으로 처리 할 수 ​​있습니다.

James McNellis said과 같이 매개 변수 목록에서 매개 변수 이름을 제거하면 C++에서 경고를 없앨 수 있습니다. 그러나 코드가 C 코드로 컴파일되면이 경우 오류가 발생합니다.

Windows 헤더는이 경고를 처리하는 데 도움이되는 UNREFERENCED_PARAMETER() 매크로를 정의합니다. 경고를 없애려면

UNREFERENCED_PARAMETER(argc); 
UNREFERENCED_PARAMETER(argv); 

을 사용할 수 있습니다. 그런 다음 다른 표준 서명을 명령 줄 매개 변수를 사용하지 않는 경우

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

나는 'UNREFERENCED_PARAMETER'에 대해 몰랐다. 그거 알아두면 좋을거야. Windows 헤더에는 두 가지 버전이 있습니다. 기본적으로 활성화 된 것은 단순히'(P)'로 확장됩니다. 여러분이 인용 한 다른 하나는'(P) = (P);'로 확장되고'lint'가 정의되면 사용됩니다; const 형 또는 nonassignable 형의 파라미터로는 실패합니다. –

+0

@James - 더 복잡한 '정의'는 내 ctags 점프가 일어난 것입니다 (조금만 스크롤해야했는데, 특히 확장이 단지'(P)가 아니었기 때문에 조금 놀랐기 때문에). –

5

: 당신이 창 헤더를 포함하지 않는 경우, 매크로는 단순히 아무것도하지 않고 표현의 매개 변수 이름의 사용으로 확장 주된 이유는 다음과 같습니다.

int main(); 
+0

다른 표준 서명은 이러한 대괄호 사이에 공백을 포함하지만 그렇지 않습니까? – paxdiablo

+3

예, C로; C++에서는 차이가 없으므로 동일합니다. 질문은 C++로 태그 되었기 때문에, 보통 C++에서 사용하는 매개 변수가없는 형식으로갔습니다. –

관련 문제