C中的范围保护

Art*_*hur 4 c scope guard

我想在C中使用范围保护来进行分析.

我想知道我在一个函数中花了多少时间.这是我做的:

int function() {

  tic();

  ... do stuff ...
  if (something)
  {
    toc();
    return 0;
   }

  toc();
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

每次退出函数时我都需要放置一个toc语句.我想这样做,而无需到处复制粘贴toc.有没有通用的方法来做到这一点,使用宏或什么?此外,我不想改变调用函数的方式,因为我需要分析许多函数.

谢谢

Ste*_*sop 5

这不会改变调用函数的方式.但是,如果您希望能够分析每个功能,可能没什么用处.

static inline int real_function() {
    // previous contents of function(), with no tic or toc
}

int function() {
    tic();
    int r = real_function();
    toc();
    return r;
}
Run Code Online (Sandbox Code Playgroud)

正如其他人所说:使用分析器,从长远来看,它将为您节省大量的精力.因为他们没有说:如果你的平台有一个.

如果没有,那么最简单的可能是(作为编码规则)函数必须只有一个出口点,并且该出口点必须通过你的宏.然后,您可以在进入和退出时使用代码手动检测所有功能.具有多个返回的旧版函数可以如上所述进行包装.

另外,请记住,当您执行此类操作时,您的编译器可能会弄乱您.你可以这样写:

tic();
do_something();
int i = something_else();
toc();
return i;
Run Code Online (Sandbox Code Playgroud)

如果编译器确定something_else没有副作用,那么即使something_else花费大量时间,它也可能将代码转换为:

tic();
do_something();
toc();
return something_else();
Run Code Online (Sandbox Code Playgroud)

您的个人资料数据会低估您在函数中花费的时间.有一个真实的探查器是如此之好的另一个原因 - 它可以与编译器合作.