2011-12-04 2 views
1

이것은 바보 같은 질문이지만, 나는 그것을 해결할 수 없다. 그리고 그것은 나를 짜증나게하기 시작하고있다!#define을 사용하여 배열을 색인 하시겠습니까?

난 다음 (REG 글로벌 임)가 : 지금

#define CS 4 
#define DS 5 

unsigned char reg[6] = {0, 0, 0, 0, 0, 0x10}; 

, 전 레지 [DS] 배열 레지 (은 0x10)의 엘리먼트 (5)에 액세스하기 위해 예상. 그러나 디버깅 (VC2010) 할 때 Visual Studio에서는 DS가 0이고 첫 번째 요소에 액세스한다고 주장합니다. 저입니까, 아니면 Visual Studio가 어리 석고 있습니까?

+0

아마도 당신은 런타임에 #define의 값을 얼마나 정확하게 확인합니까? –

+0

DS 값을 인쇄하려고 했습니까? – Oleg

+0

대신 enum을 사용하지 않는 이유는 무엇입니까? –

답변

5

예. 당신이 코드에서 매크로 DS 다른 곳에서 다시 정의하지 않는 한

reg[DS] == 0x10 

.
매크로는 사전 컴파일시 평가됩니다. 따라서 DS5으로 정의하면 컴파일러는 reg[5]이됩니다. 그들이 실행시에 존재하지 않기 때문에

또한, 당신은 실행시 매크로 값을 확인할 수 없습니다, 그들은 이미 그들이 같이 정의된다 어떤 값으로 대체됩니다.

1

reg[DS]reg의 다섯 번째 (즉, 마지막) 요소를 나타냅니다.

다른 요소에 액세스하기 될 수 있다고 생각한다면, 당신이 실수로 다른 다른 값으로 DS을 재정의하지 않을 있는지 확인하십시오 것, 그리고 DS 것을 중 하나에 의해 정의 된 기호와 충돌하지 않습니다 당신이 포함하는 헤더. DS 런타임에 존재하지 않는

참고. 컴파일러조차도 DS을 보지 못합니다. 전처리 기가 5으로 바뀌었기 때문입니다. 이것은 디버거를 트립시킬 수있는 것입니다.

관련 문제