我在一些 GL 代码中传递了一组顶点索引......每个元素都是一个 GLushort
我想用一个哨兵终止,以避免每次都费力地将数组长度与数组本身一起传递。
#define SENTINEL ( (GLushort) -1 ) // edit thanks to answers below
:
GLushort verts = {0, 0, 2, 1, 0, 0, SENTINEL};
我不能使用 0 来终止,因为某些元素的值是 0
我可以使用-1吗?
据我所知,这将包装到 GLushort 可以表示的最大整数,这将是理想的。
但是这种行为在 C 中是否有保证?
(我找不到这种类型的 MAX_INT 等效常量,否则我会使用它)
最佳答案
如果 GLushort
确实是无符号类型,则 (GLushort)-1
是 GLushort
的最大值。 The C standard guarantees that 。因此,您可以安全地使用 -1
。
例如,C89 没有 SIZE_MAX
宏用于 size_t
的最大值。它可以由用户可移植地定义为 #define SIZE_MAX ((size_t)-1)
。
这是否在您的代码中用作标记值取决于 (GLushort)-1
在您的代码中是否是有效的非标记值。
关于C/GL : Using -1 as sentinel on array of unsigned integers,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6356703/