在字符串变量中包含行号和文件名

时间:2013-10-16 10:41:05

标签: c++ visual-studio-2005

是否有一种简单的方法可以构建包含_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 / boost中有一种巧妙的方法吗?注意我只限于较旧的编译器,没有C ++ 11!

1 个答案:

答案 0 :(得分:2)

正如Alex评论的那样:双重扩展以使__LINE__成为一个字符串并让编译器为你连接字符串:

#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!");