2013-04-21 123 views
1

我有以下矩阵;C初始化矩阵

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_Maxy_Max,因此#define在这种情况下无法正常工作。我怎样才能做到这一点?

+0

将参数传递给'#define'有什么问题? – FDinoff 2013-04-21 21:23:19

+0

一旦我定义x_0例如,我不能改变它的价值。不是吗? – 2013-04-21 21:25:11

+0

是否有帮助?还是有什么你仍然困惑?你还需要在运行时更改x_0吗? – FDinoff 2013-04-22 13:38:36

回答

2

您可以传递参数给#defines创建macros

例如,你可以做

#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。就像将参数传递给函数一样。