2013-06-19 2 views
3

Visual Studio에서 \ W4 경고 수준을 사용하고 있으며 Windows 프로그램을 작성하고 있습니다.UNREFERENCED_PARAMETER 매크로 사용

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 

이러한 모든 매개 변수는 내 응용 프로그램에서 사용되지 않으므로 컴파일시 경고가 표시됩니다.

나는이이 개 다루는 방법이 있습니다 알고 사용

  1. 언급 매개 변수 HINSTANCE /*hInstance*/ ...
  2. UNREFERENCED_PARAMETER 매크로

    INT WINAPI의 WinMain (HINSTANCE HINSTANCE, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER (hInstance); UNREFERENCED_PARAMETER (hPrevInstance); UNREFERENCED_PARAMETER (lpCmdLine); UNREFERENCED_PARAMETER (nCmdShow);

올바른 것은 무엇입니까? 어느 것이 더 안전합니까? 매크로 사용에 문제가 있습니까?

+2

둘 다 모두 권한이며, 둘 다 금고입니다. 맛의 문제입니다. 당신은 무엇을 선호합니까? – Gonmator

+0

@Gonmator는 매크로를 사용할 때 속도가 감소합니까? – LppEdd

+0

아니요, 최적화가 활성화 된 경우 (출시)가 아닙니다. 'UNREFERENCED_PARAMETER (p)'매크로는'p = p;'로 정의됩니다.이 코드는 경고를 피하지만 기본적인 최적화로는 버려집니다. 디버그 빌드에서는 매크로가 코드를 생성하는지 잘 모르겠습니다. 하지만 디버그 성능에 대해서는 걱정하지 않아도됩니다. – Gonmator

답변

3

처음으로 이름 제거 버전을 고려합니다. 정보 시스템을 혼란스럽게하는 단점이 있으므로 도구 설명에 장애가있는 버전이 표시됩니다. 그러나 건강한 사람들은 이름이있는 곳에 선언문을 사용합니다. (정적 및 일회용 물건의 경우 사용하지 않는 매개 변수가 없어야합니다.)

그렇지 않으면 정말 맛이 좋습니다.

2

매개 변수에 주석을 달 것을 선호합니다.

매크로 UNREFERENCED_PARAMETER는 winnt.h에 정의되어 있으므로 이식 할 수 없습니다.

나중에 참조 할 경우 매크로를 삭제해야 할 수도 있습니다.

+1

다른 플랫폼에서 정의되지 않았더라도 매크로를 쉽게 정의 할 수 있습니다 : #define UNREFERENCED_PARAMETER (P) (P) –