1

次のマトリックスがあります。

Vertex axisVertices[] =
    {   
        { { x_0, y_0, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // origin
        { { x_Max,  y_0,  0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // eixo y
        { { x_0,  y_Max, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } } // eixo x       
    };

#define x_0 0.0f
#define y_0 0.0f
#define x_Max 1.5f
#define y_Max 1.7f

このようにマトリックスを初期化できる必要があります。Cでこれを行う唯一の方法は、列挙型を定義するか、 #define を使用することです。これは、このような初期化は定数では使用できないためです。

x_Max問題は、値をy_Maxコード全体で変更できる必要があるため#define、この場合は機能しないことです。どうすればこれを達成できますか?

4

1 に答える 1

2

パラメータを渡してマクロ#definesを作成できます

たとえば、次のことができます

#define INIT(x_0, y_0, x_Max, y_Max) \
         { { { x_0, y_0, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, \
         { { x_Max,  y_0,  0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, \
         { { x_0,  y_Max, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } } }

このように使用できるもの

 Vertex axisVertices[] = INIT(0.0f, 0.0f, 1.5f, 1.7f);

次に、の出現箇所はすべてx_0に置き換えられ0.0fます。パラメータを関数に渡すのと同じです。

于 2013-04-21T21:30:59.003 に答える