我在某些 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_t
最大值的SIZE_MAX
宏。它可以由用户以可移植的方式定义为 #define SIZE_MAX ((size_t)-1)
。
这是否在您的代码中用作标记值取决于 (GLushort)-1
在您的代码中是否为有效的非标记值。
关于C/总帐 : Using -1 as sentinel on array of unsigned integers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356703/