C++ 在字符串变量中包括行号和文件名
有没有一种简单的方法可以构建包含C++ 在字符串变量中包括行号和文件名,c++,visual-studio-2005,C++,Visual Studio 2005,有没有一种简单的方法可以构建包含\u文件和\u行值的字符串 我可以这样做: std::stringstream ss; ss << "Error in "<<_FILE_<<":"<<_LINE_<<" - too many bees!"; log(ss.str()); 在C++/STL/boost中有没有一种简洁的方法可以做到这一点?注意我只限于旧的编译器,没有C++11 正如Alex评论的那样:通过双宏扩展,将\uuuuu LIN
\u文件
和\u行
值的字符串
我可以这样做:
std::stringstream ss;
ss << "Error in "<<_FILE_<<":"<<_LINE_<<" - too many bees!";
log(ss.str());
在C++/STL/boost中有没有一种简洁的方法可以做到这一点?注意我只限于旧的编译器,没有C++11 正如Alex评论的那样:通过双宏扩展,将
\uuuuu LINE\uuuuu
变成一个字符串,并让编译器为您连接字符串:
#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!");
顺便说一句,应该是
\uuuuuuuuuuuuu
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我看到的问题有单下划线和双下划线,还有\uuuuuuuuuuuuuuuuuuuuuu如果有人为其中一个问题提供答案,那将是理想的。@John您需要自定义日志消息的哪一部分?我怀疑每次你想记录一些东西时,你都想继续键入\uuuuu FILE\uuuuuuu
和\uuuuuu LINE\uuuuuuuuuu
。我还发现,为某个返回ostream&的函数定义日志非常有用,这样你就可以在那里记录所有类型的对象
#define logfl(s) log("Error in "__FILE__":"S__LINE__" - "s)
logfl("too many bees!");