在代码中引用函数的计数次数

时间:2018-03-14 19:59:21

标签: c++ function reference

我想找到一种方法来跟踪使用宏在代码中引用函数的次数(或者任何真正的,只是更新编译时)。

我们说我有这段代码:

void n(int* d, int x) {
    functionCall();
    *d += x;
    functionCall();
    return;
}

printf("called=%d", TIMES_CALLED);
/* called=2 */

基本上是这样的。我需要确保它也是准确的,所以任何事情都会有所帮助。

1 个答案:

答案 0 :(得分:2)

__COUNTER__扩展为从0开始的整数文字,并且每次在源文件或源文件的包含头文件中使用时,它都会递增1。 __COUNTER__在您使用预编译标头时会记住它的状态。始终定义此宏。

#include <iostream> 

template<typename T> 
struct Counter 
{

    template<int>
    static void MyFunction()
    {
        std::cout << "Do smth." << std::endl;
    }
};

#define CountMe MyFunction<__COUNTER__>

int main()
{

    Counter<int>::CountMe();
    Counter<double>::CountMe();

    std::cout << __COUNTER__ << std::endl;

    return 0;
}

输出:

Do smth.
Do smth.
2