ZHCU820Y September 2004 – June 2021
通过使用 MUST_ITERATE,可以保证循环执行特定次数。以下示例会告知编译器,循环保证可以精确地运行 10 次:
#pragma MUST_ITERATE(10,10)
for(i = 0; i < trip_count; i++) { ...
在此示例中,编译器尝试生成循环(即使没有 pragma)。但如果没有为循环指定 MUST_ITERATE(例如本例),编译器会生成代码绕过循环,因此可能出现 0 次迭代。利用 pragma 规范,编译器可以知道循环至少会迭代一次,可消除循环旁路代码。
MUST_ITERATE 可用于指定循环计数的范围,以及循环计数的系数。以下示例会告知编译器,循环执行 8 次到 48 次之间,trip_count 变量是 8 的倍数(8、16、24、32、40、48)。倍数参数支持编译器展开循环。
#pragma MUST_ITERATE(8, 48, 8)
for(i = 0; i < trip_count; i++) { ...
对于具有复杂条件的循环,您应考虑使用 MUST_ITERATE。在以下示例中,编译器必须生成一个除法函数调用,以便在运行时确定执行的迭代次数。
for(i2 = ipos[2]; i2 < 40; i2 += 5) { ...
编译器不会执行以上操作。在这种情况下,使用 MUST_ITERATE 指定循环始终执行八次,编译器将尝试生成循环:
#pragma MUST_ITERATE(8, 8)
for(i2 = ipos[2]; i2 < 40; i2 += 5) { ...