2013-04-21 125 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。就像將參數傳遞給函數一樣。