gpt4 book ai didi

constants - 为什么库的 C 头文件中的常量总是定义为十六进制?

转载 作者:行者123 更新时间:2023-12-04 14:31:55 26 4
gpt4 key购买 nike

无论我使用哪个 C 兼容库,当我查看头文件定义的常量时,它们总是被定义为十六进制值。例如,在 GL/gl.h 中:

#define GL_POINTS                               0x0000
#define GL_LINES 0x0001
#define GL_LINE_LOOP 0x0002
#define GL_LINE_STRIP 0x0003
#define GL_TRIANGLES 0x0004
#define GL_TRIANGLE_STRIP 0x0005
#define GL_TRIANGLE_FAN 0x0006
#define GL_QUADS 0x0007
#define GL_QUAD_STRIP 0x0008
#define GL_POLYGON 0x0009

这个约定有什么特别的原因,为什么不简单地使用十进制值呢?

最佳答案

可能的原因有很多:

1) 位标志更容易表示为十六进制,因为每个十六进制数字正好代表 4 位。

2) 即使对于不是明确位标志的值,当以十六进制写入时,通常也有更明显的故意位模式。

例如,所有 AlphaFunction 都以 0x02 开头,并且只有一个字节不同:

#define GL_NEVER                          0x0200
#define GL_LESS 0x0201
#define GL_EQUAL 0x0202
#define GL_LEQUAL 0x0203
#define GL_GREATER 0x0204
#define GL_NOTEQUAL 0x0205
#define GL_GEQUAL 0x0206
#define GL_ALWAYS 0x0207

3) 十六进制值允许有前导零,因此更容易排列这些值。这可以使阅读(和校对)更容易。您可能会惊讶于十六进制和八进制文本中允许使用前导零但十进制不允许,但是 the C++ spec说得很清楚

A decimal integer literal (base ten) begins with a digit other than 0 and consists of a sequence of decimal digits.

关于constants - 为什么库的 C 头文件中的常量总是定义为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com