我最近参加了编码面试,我被问到一个我不知道答案的问题。在网上搜索了几天后,我来这里打电话求助。
问题描述如下:您应该提出一种方法来记录程序中函数的运行信息,例如,调用函数的时间等等。
顺便说一句,您不能修改这些功能。也许你想在这些函数中定义一个全局变量来记录运行函数,但这是不允许的。
确定!这就是我在编码面试中遇到的问题。
答案 0 :(得分:0)
这是我使用 C ++宏提出的最佳效果。我不知道它是否符合要求。
一个非常基本的版本,只记录计数。宏用宏的内容替换对函数的所有现有调用,宏记录统计信息并调用函数。可以轻松扩展以记录更多细节。假设只有一个具有该名称的函数,或者您想要对所有这些函数进行一次计数。每个函数都需要一个宏。
// here's our function
void func()
{ /* some stuff */ }
// this was added
int funcCount = 0;
#define func(...) do { funcCount++; func(__VA_ARGS__); } while(0)
int main()
{
// call the function
func();
// print stats
cout << funcCount << endl;
return 0;
}
打印1
。
更通用的版本。需要更改函数的调用方式。
// here are our functions
void someFunc()
{ /* some stuff */ }
void someOtherFunc()
{ /* some stuff */ }
// this was added
map<string, int> funcCounts;
#define call(func, ...) do { funcCounts[ #func ]++; func(##__VA_ARGS__); } while(0)
int main()
{
// call the functions
// needed to change these from 'someFunc();' format
call(someFunc);
call(someOtherFunc);
call(someFunc);
// print stats
for (map<string, int>::iterator i = funcCounts.begin(); i != funcCounts.end(); i++)
cout << i->first << " - " << i->second << endl;
return 0;
}
打印:
someFunc - 2
someOtherFunc - 1