此外, i 无法在 for 循环内定义 . 它必须是函数作用域,因此您可以继续第一个循环结束的第二个循环 .
这是一些代码:
long
getValAtUnrolled(int pos)
{
long a = 0;
long b = 1;
long c = 0;
int pos5;
int i = 0;
// get an exact multiple of 5
pos5 = pos / 5;
pos5 *= 5;
for (; i < pos5; i += 5) {
a = b;
b = c;
c = a + b;
a = b;
b = c;
c = a + b;
a = b;
b = c;
c = a + b;
a = b;
b = c;
c = a + b;
a = b;
b = c;
c = a + b;
}
for (; i < pos; i++) {
a = b;
b = c;
c = a + b;
}
return 0;
}
1 回答
你需要两个循环 . 第二个类似于您现有的循环 .
第一个[展开的版本]必须迭代到5的精确倍数,因此您需要一个额外的限制变量(例如
pos5
)并增加5 .此外,
i
无法在for
循环内定义 . 它必须是函数作用域,因此您可以继续第一个循环结束的第二个循环 .这是一些代码: