调试的时候有个小需求,就是能自动打印程序执行过程中进出的函数名,以便定位问题。其实很好实现,利用类的构造和析构就可以实现。然后通过向类传入函数名作为打印信息,就可以自动打印进出的每个函数。
那么如何获取函数名呢?当然手动传是可以的,但是也太把程序员当搬砖的了。C++里面集成了一些宏,例如__FILE__,__LINE__,__DATE__,__TIME__等,相信很多同学都用过,获取函数自身名称,可以用__FUNCTION__。废话不多说,直接上demo:
定义一个打印函数名称的类:
class FuncPrint
{
public:
FuncPrint(string func)
{
func_name = func;
cout << "<<<<<<Enter function: " << func_name << endl;
}
~FuncPrint()
{
cout << ">>>>>>Exit function: " << func_name << endl;
}
private:
string func_name;
};
随便写两个函数测试一下:
void my_function_1(int arg)
{
FuncPrint func_print(__FUNCTION__);
cout << "Input argument is " << arg << endl;
}
void my_function_2(string arg)
{
FuncPrint func_print(__FUNCTION__);
cout << "Input argument is " << arg << endl;
}
int main()
{
my_function_1(10);
my_function_2("Hello World!");
return 0;
}
输出结果:
成功在进入和退出函数的时候输出了函数名称。