C/GL:在无符号整数数组上使用-1作为哨兵

P i*_*P i 3 c arrays unsigned-integer opengl-es-2.0 sentinel

我在一些GL代码中传递一个顶点索引数组...每个元素都是一个GLushort

我希望用一个标记终止,以避免每次与数组本身一起费力地传递数组长度.

#define SENTINEL ( (GLushort) -1 ) // edit thanks to answers below
:
GLushort verts = {0, 0, 2, 1, 0, 0, SENTINEL};
Run Code Online (Sandbox Code Playgroud)

我不能使用0来终止,因为一些元素的值为0

我可以使用-1吗?

根据我的理解,这将包装到GLushort可以表示的最大整数,这将是理想的.

但这种行为在C中是否得到保证?

(我找不到这种类型的MAX_INT等效常量,否则我会使用它)

Alo*_*hal 5

如果GLushort确实是无符号类型,那么(GLushort)-1是最大值GLushort. C标准保证.所以,你可以放心使用-1.

例如,C89没有SIZE_MAX宏的最大值size_t.它可以由用户可移植地定义为#define SIZE_MAX ((size_t)-1).

这是否可以作为代码中的标记值取决于代码中是否(GLushort)-1为有效的非标记值.

  • 最后,有人知道`(无符号类型)-1`有效. (3认同)