2013-10-16 108 views
1

是否有一種簡單的方法來構建包含_FILE__LINE_值的字符串?將行號和文件名包含在字符串變量中

我可以這樣做:

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

但是,這是一個PITA,相比這可能是理想的:

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

有一個整潔的方式做到這一點在C++/STL /促進?注意我僅限於較舊的編譯器,沒有C++ 11!

+0

順便說一句,應該是'__FILE__'和'__LINE__' – billz

+2

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

+0

我看到的單下劃線和雙下劃線的問題,也'_line' - 做所有版本存在或者只是懶惰的人母雞打字? –

回答

2

亞歷克斯說:雙宏擴展,使__LINE__成一個字符串,讓編譯器在連接字符串爲您提供:

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

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

減少打字,作爲greatwolf建議:

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

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

我也發現#define記錄一些函數返回ostream&相當有用,那麼你可以在那裏記錄所有類型的對象 –

+0

@PeterK好戲! –

相關問題