-5

私は今、質問を以下に明確に言い換えました:

最初は、以下の関数に適用される 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 つの異なる関数があります。しかし、それで十分であるため、以下の 1 つだけを示します)

function(uint8 *ubase)
{
    if (((*(ubase + X3)) - *((ubase + X7))) != 
    (*((ubase + X2)) - *((ubase + X6)))  
    and so on ....)
    {
        Statements1;
        Statements2;
    }
    else
    {
        Statements3;
        Statements4;
    }            
}

ここで、フラグに基づいてさまざまなオフセット セットを適用する必要があります。つまり、bool bType が TRUE の場合は上記のオフセットを使用し、それ以外の場合は別のセットを使用します。幸いなことに、適用される新しいセットは、上記の各オフセット値の 2 * だけです。

マクロは、プログラムで定数を複数回使用する必要がある場合にのみ使用されることを知っています。

それを行う1つの方法は、以下のようなものです:

新しいオフセットと古いオフセットには類似性があるため、マクロ部分を保持して、次のような単純化されたコードで条件を確認できます。

if ((*((ubase + (X3 * (TRUE == bType ? 0 : 2)))))...........)

ただし、上で述べたように、オフセットがいくつか発生するため、上記の方法を実行すると、発生したすべての条件をチェックする必要があります。20回くらいあるので、不思議に思ってこんな風にやってみるといいです。

上記の方法は、オフセット処理の問題に対処するための良い方法ですか?

前もって感謝します。

4

1 に答える 1