繁体   English   中英

C MACRO 跟踪现有源代码中的“for”循环迭代

[英]C MACRO to trace the "for" loop iteration in the existing source code

我需要 ac/c++ MACRO 来跟踪现有源代码中的“for”循环迭代,并在循环运行超过 50 次迭代时打印一些消息。 注意:宏不应更改代码的现有功能。 我尝试了一些逻辑C/C++: "for" 宏来跟踪运行多次迭代的循环,但它并非在所有情况下都有效!

  int main()
  {
    int i,j,x,y;
    j=100;
    y=200;

    //case 1
    for(i=0;i<j;i++)   
        for(x=0;x<y;x) 
        x++;


    //case 2
    if(i>0)
      for(;i>0;)    
        i--;

     //case 3
     for(;;)  
     {
        i++;
     }

     return 0;
}

这是通过所有三种情况的概念证明:

// Max lines in a file you are profiling
#define MAX_LINES 65535
// Array to count all iterations, initialized to zero
uint32_t iterations[MAX_LINES];
// Increments the iteration for the given line, returns non-zero
#define ITER(ln)  ++iterations[ln]
// Override for definition
#define for(...) for(__VA_ARGS__) if (!ITER(__LINE__)) { } else

这里的限制是,你只能有一个for每行,否则会结合自己的迭代。 所以,这没关系:

for(i=0;i<j;i++)   
    for(x=0;x<y;x)
        x++;

但这不是:

for(i=0;i<j;i++) for(x=0;x<y;x) x++;

另一个限制是我们为每一行定义了一个数组。 您可以轻松地将其设为哈希图或其他内容,但这与本示例无关。 使用哈希图,您可以使用__LINE__#x (循环的字符串表示)来构造 ID,因此第一个限制也基本上消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM