C/总帐 : Using -1 as sentinel on array of unsigned integers

标签 c arrays opengl-es-2.0 unsigned-integer sentinel

我在某些 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/

相关文章:

Android 照片编辑器,opengl es 2.0 或 canvas

c - 从具有结构数组的 CSV 文件中读取

javascript indexOf map 函数的结果

java - 将 Object[] 结果在 Matlab Runtime 中转换为 double[][] 数组 Java

iOS/GLES2 : How to programmatically determine maximum available texture units?

ios - GLKit 不绘制 GL_POINTS 或 GL_LINES

c - C中的指针,不明白他们是如何得到这个结果的

c - 了解 C 中的退格 (\b) 行为

C - char 和 int 之间的 acsii 转换

java - 数组类型未定义 copyOf 方法