如何编写一个获取函数运行时的宏?

时间:2013-12-11 07:57:45

标签: c macros posix timeval

假设我们想知道函数A运行多长时间,我们可以编写这样的代码

    struct timeval tpstart,tpend;  
    gettimeofday(&tpstart,NULL); 
    A(); 
    gettimeofday(&tpend,NULL); 
    float timeuse= tpend.tv_sec-tpstart.tv_sec + (tpend.tv_usec-tpstart.tv_usec) / 1000000; 
    printf("Used Time:%f\n",timeuse); 

但是我怎么能把它封装到MACRO这样的运行时(A),也许是Runtime(A,B,...),有时几个函数一起运行。

1 个答案:

答案 0 :(得分:1)

如果您不关心函数的返回值,那么生活很简单:

#define Runtime(x)  do { \
    struct timeval tpstart,tpend;  \
    gettimeofday(&tpstart,NULL);   \
    x; \
    gettimeofday(&tpend,NULL); \
    float timeuse= tpend.tv_sec-tpstart.tv_sec + (float)(tpend.tv_usec-tpstart.tv_usec) / 1000000; \
    printf("Used Time:%f\n",timeuse); \
} while(0)

Runtime( A() );
Runtime( A() ; B() );