我现在在下面明确地解释了这个问题:
最初,我正在处理16X32字节矩阵的偏移量,这些矩阵将在下面的函数中应用。以下功能是我正在做的简化形式,因为这将清楚地表明我想在这里做。
在0,1,2,3,4,5,6,7位置垂直的0,8,16,24,32,40,48,56。
所以,我把它们定义为宏:
#define X1 0 * 8
#define X2 1 * 8
#define X3 2 * 8
............
#define X7 7 * 8
简化代码:(实际上使用了所有上述偏移并使用这些偏移值来确定某些东西有3个不同的函数。但是只能在下面展示一个,因为它应该足够了)
function(uint8 *ubase)
{
if (((*(ubase + X3)) - *((ubase + X7))) !=
(*((ubase + X2)) - *((ubase + X6)))
and so on ....)
{
Statements1;
Statements2;
}
else
{
Statements3;
Statements4;
}
}
现在,我需要根据标志应用不同的偏移集。即如果bool bType为TRUE,请使用上面的偏移量使用另一组。幸运的是,将要应用的较新集合只是每个偏移值的2 *。
我知道只有当我们需要在程序中多次使用常量时才使用宏。
这样做的一种方法如下:
由于较新的和较旧的偏移量具有相似性,我仍然可以保留宏部分并检查简单代码中的条件,如
if ((*((ubase + (X3 * (TRUE == bType ? 0 : 2)))))...........)
然而,正如我上面提到的,有几次出现的偏移,并且以上述方式进行意味着需要在所有出现时检查条件。由于大约有20次这样的事件,所以想知道这样做是一种好习惯。
上述方法是解决偏移处理问题的好方法吗?
提前致谢。
答案 0 :(得分:1)
此?
#include <stdio.h>
int main(void)
{
int set1[] = {0 << 0, 8 << 0, 16 << 0, 32 << 0, 48 << 0};
int set2[] = {0 << 1, 8 << 1, 16 << 1, 32 << 1, 48 << 1};
int i;
for (i = 0; i < 4; i++) {
printf("%d %d\n", set1[i], set2[i]);
}
return 0;
}