C 宏,用于跟踪现有源代码中的"for"循环迭代
C MACRO to trace the "for" loop iteration in the existing source code
我需要 c/c++ 宏来跟踪现有源代码中的"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,因此第一个限制也基本消失。
相关文章:
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 将多个 for 循环组合成单个迭代器
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 使用一个 for 循环如何迭代和测试迭代器值?
- 二进制表达式的操作数无效 - 使用 for 和迭代器
- 转到基于范围的 for 循环中的下一个迭代器
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
- 在C++中使用 for 循环的数组迭代
- 迭代的"range-based for"召唤
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 在for循环的某些迭代中,字符串的长度为0,而在其他迭代中则不为0
- 如何在多次迭代后停止for循环
- 在指针迭代中使用for循环时出现分段错误
- 为什么每次“for”迭代都会输出 4 次
- 使用for迭代QMap
- 跳过当前' for '迭代的其余部分,开始一个新的迭代
- 使用基于范围的for迭代图的边缘