개발/코더 탈출

1편: UNREFERENCED_PARAMETER – 사용하지 않는 매개변수 안전하게 무시하기

-=HaeJuK=- 2025. 4. 9. 16:27
728x90
반응형

 

 

🔍 UNREFERENCED_PARAMETER 매크로를 꼭 써야 하는 이유

"이 매개변수 안 쓰는데… 지워도 되나?"
"경고가 자꾸 뜨네? 어떻게 없애지?"
이런 고민, 한 번쯤 해보셨죠?

C/C++ 코딩을 하다 보면 함수 시그니처에 선언된 매개변수를 사용하지 않는 경우가 종종 생깁니다.
이럴 때 등장하는 게 바로 👉 UNREFERENCED_PARAMETER(x) 매크로입니다.

⚠️ 문제 상황

void OnEvent(int eventCode, void* pContext)
{
    // 아직 pContext를 사용하지 않음
    HandleEvent(eventCode);
}

Visual Studio에서는 이렇게 경고가 뜹니다:

warning C4100: 'pContext': unreferenced formal parameter

✅ 해결 방법: UNREFERENCED_PARAMETER

void OnEvent(int eventCode, void* pContext)
{
    UNREFERENCED_PARAMETER(pContext);
    HandleEvent(eventCode);
}

🔧 정의는 간단합니다:

#define UNREFERENCED_PARAMETER(P) (void)(P)

컴파일러에게 "이 파라미터는 일부러 안 쓰는 거야"라고 알려주는 효과를 줍니다.

🧭 플랫폼 호환을 위한 매크로 정의

Windows에선 <Windows.h>에 이미 정의돼 있지만, Linux/Unix 환경에선 직접 정의해줘야 합니다.

🎯 안전한 매크로 정의 방법:

#ifndef UNREFERENCED_PARAMETER
#define UNREFERENCED_PARAMETER(P) (void)(P)
#endif

이 코드를 공용 헤더에 넣어두면 윈도우/리눅스 양쪽 환경 모두 대응 가능합니다.

📌 왜 굳이 이걸 써야 할까?

1. 컴파일러 경고 제거

Visual Studio에서는 사용하지 않는 매개변수에 대해 C4100 경고를 발생시킵니다.

2. 코드 의도 표현

UNREFERENCED_PARAMETER(pContext);

→ 일부러 무시하고 있다는 것을 명확히 표현할 수 있습니다.

3. 콜백 함수/인터페이스 대응

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    ...
}

필요 없어도 지울 수 없고, 경고는 피하고 싶을 때 꼭 필요한 매크로입니다.

🧠 정리

이유 설명
✅ 경고 제거 Visual Studio의 C4100 경고 제거
✅ 명확한 의도 표현 일부러 안 쓰는 매개변수임을 명시
✅ 콜백/인터페이스 대응 사용하지 않더라도 시그니처 고정 필요
✅ 유지보수에 유리 향후 사용 가능성을 열어둠
✅ 크로스 플랫폼 대응 직접 정의하면 Windows/Linux 모두 사용 가능

✍️ 마무리 한 줄 요약

UNREFERENCED_PARAMETER는 단순한 경고 제거용이 아닙니다.
코드의 의도를 명확히 드러내는 좋은 습관이자, 유지보수성을 위한 장치입니다.
728x90