2013-04-21 3 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에서이 작업을 수행 할 수있는 유일한 방법은 enum을 정의하거나 #define을 사용하는 것입니다. 이처럼 초기화하는 것은 상수와 함께 사용할 수 없기 때문입니다.

문제는 코드 전체에서 x_Maxy_Max 값을 변경할 수 있어야하므로 #define은이 경우 작동하지 않습니다. 이것을 어떻게 할 수 있습니까?

+0

'# define'에 매개 변수를 전달할 때 오류가 있습니까? – FDinoff

+0

예를 들어 x_0을 정의하면 그 값을 변경할 수 없습니다. 그렇지 않니? 대답 –

+0

가 도움이 되었습니까? 아니면 아직도 혼란 스러울 것이 있습니까? 또한 런타임시 x_0을 변경해야합니까? – FDinoff

답변

2

당신은 예를 들어 당신이 할 수있는 macros

만들 #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 } } } 

당신은 그런 x_0의 모든 항목을 바꾸는 것이

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

처럼 사용할 수있는 에 의해 0.0f. 매개 변수를 함수에 전달하는 것과 같습니다.