【问题标题】:C Initializing MatrixC 初始化矩阵
【发布时间】:2013-04-21 21:21:29
【问题描述】:

我有以下矩阵;

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 在这种情况下不起作用。我怎样才能做到这一点?

【问题讨论】:

  • 将参数传递给#defines有什么问题?
  • 例如,一旦我定义了 x_0,我就无法更改它的值。对不对?
  • 答案有帮助吗?或者你还有什么困惑的地方吗?您还需要在运行时更改 x_0 吗?

标签: c enums initialization c-preprocessor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多