【问题标题】:Handle offfsets in a function处理函数中的偏移量
【发布时间】:2013-06-18 17:44:37
【问题描述】:

我现在在下面清楚地解释了这个问题:

最初,我正在处理一个 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 次这样的情况,想知道这样做是一个好习惯。

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

提前致谢。

【问题讨论】:

  • 你想做什么?
  • 如果你还没有代码,现在担心哪种方式最快还为时过早。
  • “我怎样才能继续这个” - 继续什么?
  • 我以前将它们作为常量,但现在看起来需要将其作为变量处理。我想知道一种有效的方法来处理相同功能中的偏移量。
  • 我不知道你在说什么......

标签: c function pointers


【解决方案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;
}

【讨论】:

  • 您不能在运行时根据输入更改 #define 值,我不清楚,如果您想根据输入进行级数,为什么不乘以 8 * 4 以获取数组中的第四个元素?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多