在没有谷歌帮助的情况下,我想知道是否有人可以告诉我是否可以创建一个 C++ (g++) 调试宏,例如,一个“改进的”std::cout。想法是通过 << 接受 args 并附加一些文本,以便
DBG << "Hello" << world;
可能会产生
myfile.cpp 1420 Hello world
我知道那里有做这种事情的日志库(?)/宏(?)。我对它是如何完成的感兴趣,而不是使用一些包。
您的宏可以创建一个endl
在销毁时调用的临时变量。临时将一直存在,直到封闭表达式结束,通常在;
.
#include <iostream>
struct X {
~X() { std::cout << std::endl; }
};
#define DBG (X(), std::cout << __FILE__ << " " << __LINE__ << " ")
int main () {
std::string world(", world");
DBG << "Hello" << world;
}
怎么样:
#define DBG std::cout << __FILE__ << " " << __LINE__ << " "
足够接近!不幸的是,您必须world
事先声明变量。
调试宏背后的想法是,如果您处于发布模式,它应该编译为空。尝试这个;
#ifdef _DEBUG
#define MESSAGE(x) (std::cout << __FILE__ << " " << __LINE__ << " " << x);
#else
#define MESSAGE(x) ;
#endif
int _tmain(int argc, _TCHAR* argv[])
{
MESSAGE("Hello");
return 0;
}
当你处于发布模式时,MESSAGE(x)
不会有任何影响,但在调试模式下,你会收到一条消息到命令行。