在没有谷歌帮助的情况下,我想知道是否有人可以告诉我是否有可能创建一个C ++(g ++)调试宏,例如,“改进的”std :: cout。想法是通过<<接受args并附加一些文字以便
DBG << "Hello" << world;
可能会产生
myfile.cpp 1420 Hello world
我知道有一些日志库(?)/宏(?)可以执行此类操作。我对它是如何完成感兴趣,而不是使用一些软件包。
答案 0 :(得分:13)
您的宏可以创建一个临时变量,在销毁时调用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;
}
答案 1 :(得分:6)
怎么样:
#define DBG std::cout << __FILE__ << " " << __LINE__ << " "
足够近!不幸的是,您必须事先声明变量world
。
答案 2 :(得分:1)
调试宏背后的想法是,如果你处于发布模式,它应该编译为空。试试这个;
#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)
将无效,但在调试模式下,您将收到命令行的消息。