我在一些 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)-1GLushort 的最大值。 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/

10-13 05:07