【发布时间】:2026-01-17 17:05:01
【问题描述】:
我想知道我是否可以看到 C 程序的循环展开形式。例如我有以下 for 循环
// The following code mimics functionality of a logic circuit whose
//inputs are a,b,c and d
//output f
//At every for loop iteration, fresh values of a,b,c and d are input
//to the code whereas k value is used from the previous iteration.
bool k = 0;
bool a,b,c,d;
bool g,h,n,j,f;
for(i = 1; i < 100; i++)
{
h = !(a | b); //nor gate
g = (b & c); //and gate
n = !(c & d); //nand gate
f = (k==0) ? h : g; //mux
j = n ^ f; //xor gate
k = j;
}
问题是“是否可以以可读格式查看该程序的循环展开形式”。我有兴趣了解 gcc 编译器如何表达 h99、g99、n99、f99、j99 和 k99(第 99 次循环迭代中的 h、g、n、f、j 和 k 的值)是否可以这样做? 或者应该怎么做才能从输入 a99、b99、c99、d99 到 a1、b1、c1 和 d1 中查看 h99、g99、n99、f99、j99 和 k99 的表达式?
简而言之,我想在每次迭代“i”时进行符号模拟 即,将输出 hi、gi、ni、fi、ji 和 ki 用输入 ai、bi、ci、di 表示为 a1、b1、c1 和 d1。
如果您有任何问题,请告诉我。
【问题讨论】:
-
AFAIK,这是不可能的。如果你想做,我会写一个小预处理器自己做。
-
你的意思是,like this?
-
您的意思是要显示每个符号的一系列值?你考虑过printf吗?即打印带有符号名称的简单标题行,并在 for 循环中包含打印语句以显示数据?
-
a,b,c,d在这个循环中不会被修改。因此,h、g和n在循环内不会被修改。因此,第一个“优化”是将这些移出循环。此外,j未使用,可以简单地替换为k。
标签: c loops simulation unroll