2012-07-13 4 views
4

어떤 C 호환 라이브러리를 사용하든 관계없이 헤더 정의 된 상수를 보면 항상 16 진수 값으로 정의됩니다. 여기에, 예를 들어, GL/gl.h에서 :라이브러리의 C 헤더 파일에있는 상수는 항상 16 진수로 정의되는 이유는 무엇입니까?

#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 

이 규칙에 대한 특별한 이유가 왜 단순히 대신 소수점 값을 사용하지?

답변

4

이 가능한 이유가 있습니다.

2) 명시 적 비트 플래그가 아닌 값의 경우에도 종종 16 진수로 기록 될 때 더 명확한 의도적 비트 패턴이 있습니다.

는 예를 들어, 모든 AlphaFunctions는 0x02로 시작하여 단일 바이트 다르다 : 16 진수 값은 앞에 0을 가질 수있다

#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), 그래서 값을 정렬하는 것이 용이하다. 이렇게하면 독서 (및 교정)가 쉬워집니다. 당신은 앞에 0이 16 진수와 진수 리터럴에서 허용하지만 진수되지 않습니다 놀라게 될 수도 있지만 the C++ spec은 아주 명시 적으로 말한다

문자 그대로의 진수 정수 (기본 열)가 0이 아닌 숫자로 시작의 순서로 구성 십진수.

2

상수 값이 비트 플래그를 참조하고 결합하려는 경우 16 진수 표기법은 표현되는 비트를 표시하는 편리한 방법입니다. 부스트 헤더에서 예를 들어

:

// Type encoding: 
// 
// bit 0: callable builtin 
// bit 1: non member 
// bit 2: naked function 
// bit 3: pointer 
// bit 4: reference 
// bit 5: member pointer 
// bit 6: member function pointer 
// bit 7: member object pointer 

#define BOOST_FT_type_mask       0x000000ff // 1111 1111 
#define BOOST_FT_callable_builtin      0x00000001 // 0000 0001 
#define BOOST_FT_non_member       0x00000002 // 0000 0010 
#define BOOST_FT_function        0x00000007 // 0000 0111 
#define BOOST_FT_pointer        0x0000000b // 0000 1011 
#define BOOST_FT_reference       0x00000013 // 0001 0011 
#define BOOST_FT_non_member_callable_builtin   0x00000003 // 0000 0011 
#define BOOST_FT_member_pointer      0x00000020 // 0010 0000 
#define BOOST_FT_member_function_pointer    0x00000061 // 0110 0001 
#define BOOST_FT_member_object_pointer    0x000000a3 // 1010 0001 
+0

그러나 이것은 OP의 GL 상수에 적용되지 않습니까? 그렇습니다. – CaffeineAddict

+0

아니요, 그렇지 않습니다. 그러나 스타일은 동일합니다. 비트 현명한 유용성이 처음이라고 생각합니다. 이것이 대회를 이끌었습니다. 컨벤션은 비트 단위 작업이 관련이 있는지 여부에 관계없이 계속됩니다. – jwismar

0

그것은 짧은,하지만 그들은 비트 플래그 인 경우 더 중요한 것은, 그들을 결합 및 마스크를 만드는 것이 더 쉽습니다. 각 16 진수 정확히 4 비트를 나타 내기 때문에

1) 비트 플래그, 진수로 표현하기가 훨씬 쉽다 :