Byz*_*ian 6 convention hex constants
无论我使用哪个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
Run Code Online (Sandbox Code Playgroud)
这个约定有什么特别的原因,为什么不简单地使用十进制值呢?
有许多可能的原因:
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
Run Code Online (Sandbox Code Playgroud)
3)允许十六进制值具有前导零,因此更容易排列值.这可以使阅读(和校对)更容易.您可能会感到惊讶的是,在十六进制和八进制文字中允许前导零而不是十进制,但C++规范明确说明
十进制整数文字(十进制)以0以外的数字开头,由一系列十进制数字组成.