我现在在下面清楚地解释了这个问题:
最初,我正在处理一个 16X32 字节矩阵的偏移量,该矩阵将在下面的函数中应用。下面的函数是我正在做的事情的简化形式,因为这将使我清楚地知道我在这里尝试做什么。
偏移量:0、8、16、24、32、40、48、56 在位置 0、1、2、3、4、5、6、7 垂直。
所以,我将它们定义为宏:
#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 次这样的事件,想知道这样做是一个好习惯。
上述方法是解决偏移处理问题的好方法吗?
提前致谢。