C++

[C++] 에러코드를 메세지로 format하기

index1207 2023. 11. 17. 14:16

Format을 왜 해야 할까

winapi나 다른 운영체제의 api를 사용하다 보면 애러가 날 때 애러 메시지가 아니라 에러코드를 리턴한다. 따라서 이 애러가 무슨 애러인지 알기 위해서는 구글링으로 애러코드를 검색해야 한다.

 

애러코드를 메시지로

구글링으로 메시지를 알아내도 되지만 매번 검색하기는 귀찮다는 문제가 있다.

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
       NULL,
       errCode, /* 애러 코드 */
       0,
       (LPTSTR)&errorMessage, /* 애러 메세지 */
       0,
       NULL);

winapi에서는 애러코드를 메시지로 변환해 주는 FormatMessage라는 함수가 있다. 하지만 이 함수를 호출하기 위해서는 복잡한 인수가 들어간다. 또 크로스플랫폼을 개발하기 위해 또 그 os에서의 애러코드 변환 코드를 작성해줘야 한다.

 

이를 개선하기 위해서는 C++ 표준에 있는 운영체제 애러코드메시지로 변환해 주는 함수를 사용하면 된다.

auto errorMessage = std::system_category().message(errCode);