개발/코더 탈출
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