0

我最近参加了一次编程面试,被问到一个我不知道答案的问题。在网上搜索了几天的答案后,我来这里求助。

问题描述如下:你应该提出一种方法来记录你程序中函数的运行信息,例如,函数被调用的次数等等。

顺便说一句,您不能修改这些功能。也许你想在这些函数中定义一个全局变量来记录正在运行的函数,但这是不允许的。

好的!这就是我在编码面试中遇到的问题。

4

1 回答 1

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
于 2013-09-13T08:13:15.590 回答