2013-10-16 6 views
1

_FILE__LINE_ 값을 포함하는 문자열을 쉽게 만들 수 있습니까? ++/STL C에서이 작업을 수행하는 깔끔한 방법이 있나요문자열 변수에 줄 번호와 파일 이름 포함

log("Error in "+_FILE_+":"+_LINE_+" - too many bees!"); 

을 :

내가 좋아하는 뭔가를 할 수 :

std::stringstream ss; 
ss << "Error in "<<_FILE_<<":"<<_LINE_<<" - too many bees!"; 
log(ss.str()); 

을하지만 그 수 있습니다 이상적인에 비해 피타입니다 /후원? 참고 이전 컴파일러, 아니 C++ 11로 제한됩니다!

+0

BTW, '__FILE__'과'__LINE__'이어야합니다. – billz

+2

http://stackoverflow.com/questions/19343205/c-concatenating-file-and-line-macros –

+0

질문에 한 줄과 두 줄의 밑줄,'_line'도 표시됩니다. 모두 수행하십시오. 버전이 존재하거나 사람들이 게으르다. 암탉 입력? –

답변

2

알렉스 댓글로 : 문자열로 __LINE__을하고 컴파일러 수 있도록하는 이중 매크로 확장이 당신을 위해 문자열을 연결 : greatwolf이 제안

#define S(x) #x 
#define S_(x) S(x) 
#define S__LINE__ S_(__LINE__) 

log("Error in "__FILE__":"S__LINE__" - too many bees!"); 

는 타이핑을 줄이기 위해 :

#define logfl(s) log("Error in "__FILE__":"S__LINE__" - "s) 

logfl("too many bees!"); 
+1

또한 ostream을 반환하는 일부 함수에 #define 로그를 사용하는 것이 매우 유용하다는 것을 알았습니다. 그런 다음 모든 종류의 객체를 기록 할 수 있습니다. –

+0

@PeterK 멋진 트릭! –

관련 문제