2013-10-16 30 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好戏! –

相关问题