代码之家  ›  专栏  ›  技术社区  ›  avgn

如何优雅而不冗长地处理C代码的多个部分?

c
  •  1
  • avgn  · 技术社区  · 6 年前

    我只在标记 timing==1 我想要不同的时间进入不同的变量。

    这就是我目前正在做的:

    if (timing) {time1=getTime}
    foo(A);
    bar(A);
    if (timing) {elapsed1+=getTime-time1;}
    
    if (timing) {time2=getTime}
    bar(A);
    if (timing) {elapsed2+=getTime-time2;
    
    if (timing) {time2=getTime}
    bar(C);
    if (timing) {elapsed2+=getTime-time2;
    
    if (timing) {time1=getTime}
    foo(A);
    fun(B);
    if (timing) {elapsed1+=getTime-time1;}
    

    time1+=TIMEIT{
    foo(A);
    bar(A);
    }
    
    time2+=TIMEIT{
    bar(A);
    }
    
    time2+=TIMEIT{
    bar(B);
    }
    
    time1+=TIMEIT{
    foo(A);
    fun(B);
    }
    

    它何时回来 0 如果 timing==0 或者是街区在 {} .

    另外,有没有一种方法可以自动计算出一个代码块(或整个代码)调用bar()和foo()的时间,而不是fun()和swiz()的时间,而不分析整个代码?如果是这样的话,这会恶化性能吗?

    更具体地说,是这样的:

    time+=TIMECALLSTOBARANDFOO{
    foo(A);
    bar(B);
    swiz(foo(A));
    ...
    fun(A);
    bar(C);
    ...
    }
    

    哪里 timebar 将只包含调用 bar foo

    1 回复  |  直到 6 年前
        1
  •  2
  •   nicomp    6 年前

    可以使用宏根据变量“timing”中的值调用计时逻辑

    #include <stdio.h>
    
    int elapsed1 = 0, time1 = 0;
    int timing = -1;
    
    #define TIMEIT(x) \
    if (timing) {\
    time1=getTime();} \
    x;\
    if (timing) {elapsed1+=getTime()-time1;}
    
    
    void a(void);
    int getTime();
    
    int main()
    {
        printf("Hello, World!\n");
    
        timing = -1;
        TIMEIT(a());
    
        timing = 0;
        TIMEIT(a());
    
        return 0;
    }
    void a(void) {printf("\n Hello from a()");}
    int getTime() {printf("\n Hello from getTime()"); return 42;}