无论我使用哪个 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/