로그를 좀더 보기쉽게 찍기(g++)
- 최초 작성일: 2022년 9월 21일 (수)
- 참조: http://dev-crazybird.blogspot.com/2014/04/g.html
목차
[TOC]
내용
로그를 작성할 때 해당 파일명과 소스라인 위치의 함수명까지 확인할 수 있는 방법이다.
- __FILE__ : 소스코드가 포함된 파일 이름을 return
- __LINE__ : 소스코드의 줄 번호 return
- __func__ : 소스코드가 포함된 함수 이름 return
- __PRETTY_FUNCTION__ : 소스코드가 포함된 클래스명과 타입명 return
- typeid(T t).name() : 맹글링된 클래스명이나 타입명 return
위 매크로들은 g++ 기준이며, MSVC나 clang에서는 이와 같거나 같은 역할을 하는 다른 이름의 매크로가 있을 것이다.
예제
#include <iostream>
#include <typeinfo>
class CPrettyLog
{
public:
void Print(void)
{
std::cout
<< "__PRETTY_FUNCTION__ = " << __PRETTY_FUNCTION__ << std::endl
<< "__func__ = " << __func__ << std::endl
<< "__LINE__ = " << __LINE__ << std::endl
<< "__FILE__ = " << __FILE__ << std::endl
<< "typeid(this).name() = " << typeid(this).name() << std::endl
<< std::endl;
}
};
void Print(void)
{
std::cout
<< "__PRETTY_FUNCTION__ = " << __PRETTY_FUNCTION__ << std::endl
<< "__func__ = " << __func__ << std::endl
<< "__LINE__ = " << __LINE__ << std::endl
<< "__FILE__ = " << __FILE__ << std::endl
<< std::endl;
}
int main(int argc, char** argv)
{
CPrettyLog pl;
pl.Print();
Print();
std::cout
<< "__PRETTY_FUNCTION__ = " << __PRETTY_FUNCTION__ << std::endl
<< "__func__ = " << __func__ << std::endl
<< "__LINE__ = " << __LINE__ << std::endl
<< "__FILE__ = " << __FILE__ << std::endl
<< std::endl;
return 0;
}
결과
__PRETTY_FUNCTION__ = void CPrettyLog::Print()
__func__ = Print
__LINE__ = 13
__FILE__ = main.cpp
typeid(this).name() = P10CPrettyLog
__PRETTY_FUNCTION__ = void Print()
__func__ = Print
__LINE__ = 26
__FILE__ = main.cpp
__PRETTY_FUNCTION__ = int main(int, char**)
__func__ = main
__LINE__ = 42
__FILE__ = main.cpp