我一直在阅读一些代码并且发现了一个不知何故扰乱了我的声明。
typedef GLfloat vec2_t[2];
typedef GLfloat vec3_t[3];
从我的角度来看,如
这样的陈述typedef unsigned long ulong;
表示 ulong 表示 unsigned long
现在,下面的陈述是否意味着 vec2_t [2] 相当于 GLfloat ??
typedef GLfloat vec2_t[2];
最有可能的,可能不是预期的含义。如果有人为我解决这个问题,我将不胜感激。感谢
答案 0 :(得分:15)
基本上typedef
具有与普通C声明完全相同的格式,但它引入了该类型的另一个名称,而不是该类型的变量。
在您的示例中,如果没有typedef,vec2_t
将是两个GLfloat
的数组。使用typedef意味着vec2_t
是“两个GLfloat
s的数组”类型的新名称。
typedef GLfloat vec2_t[2];
这意味着这两个声明是等效的:
vec2_t x;
GLfloat x[2];
答案 1 :(得分:2)
C声明语法可能令人困惑,但您只需要一个简单的规则:从里到外读取。完成后,只需了解typedef为类型创建另一个名称(别名)。
内部是声明的标识符(或者如果丢失则会去的地方)。例子:
T a[2]; // array (length 2) of T
T* a[2]; // array (length 2) of pointer to T ([] before *)
T (*p)[2]; // pointer to array (length 2) of T (parens group)
T f(); // function returning T
T f(int, char*); // function of (int, pointer to char) returning T
T (*p)(int); // pointer to function of (int) returning T
T (*f(char, T(*)[2]))(int);
// f is a function of (char,
// pointer to array (length 2) of T)
// returning a pointer to a function of (int)
// returning T
typedef T (*F(char, T(*)[2]))(int);
// F is the type:
// function of (char,
// pointer to array (length 2) of T)
// returning a pointer to a function of (int)
// returning T
// (yes, F is a function type, not a pointer-to-function)
F* p1 = 0; // pointer to F
T (*(*p2)(char, T(*)[2]))(int) = 0; // identical to p1 from the previous line
答案 2 :(得分:1)
在您的情况下,vec2_t
是一个包含2个GLfloats的数组,vec3_t
是一个包含3个GLfloats的数组。然后,您可以执行以下操作:
vec2_t x;
// do stuff with x[0] and x[1]
答案 3 :(得分:1)
如果要为数组类型vec2_t
创建typedef-name GLfloat[2]
,则正确的语法不是
typedef GLfloat[2] vec2_t;
(初学者可能会期待),而是
typedef GLfloat vec2_t[2];
即。这里的语法的一般结构,正如已经说过的那样,在变量声明中是相同的。
答案 4 :(得分:0)
这意味着vec2_t
是一个2 GLfloat
的数组,而vec3_t
是一个3的数组。
答案 5 :(得分:0)
如果C语法允许将其写为
,则意图会更清晰typedef GLfloat[2] vec2_t;
typedef GLfloat[3] vec3_t;
但这不是有效的语法。