处理函数中的函数

时间:2013-06-18 17:44:37

标签: c function pointers

我现在在下面明确地解释了这个问题:

最初,我正在处理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次这样的事件,所以想知道这样做是一种好习惯。

上述方法是解决偏移处理问题的好方法吗?

提前致谢。

1 个答案:

答案 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;
}