이 에러 -_-;; reduce to an integer constant

jinushun의 이미지

에러명 : case label does not reduce to an integer constant

에러 위치

void analysis_si2cmfc(U8 *p_imsg_data)
{
	switch(*(p_imsg_data + OFF_FUNCTIONX))
	{
		case  GET_AT_IDX('E'):

case 부분에서 에러가 뜹니다.

C 에서는 case 에 인티저값만 된다는 걸 알고있습니다. C++ 은 다른것도 된다는 말을 본거 같기는 한데..

아무튼 나머지 코드는 아래와 같습니다.

int htAlarmtype[7] = {-1,-1,3/*O*/,-1,4/*C*/,2/*R*/,1/*E*/};
#define GET_AT_IDX(x)	(htAlarmtype[x%7])

와 같습니다.

U8 은 unsigned char 이구요..

음 제가 봐서는 안될 이유가 전혀 없는데.

왜 저 에러가 계속 뜨는것이죠 -_-;;

서지훈의 이미지

switch() ... case 문에서 case절에 오는 값은 변하지 않는 상수여야 합니다.
근데...
예측을 할 수 없는 define 문이 오게 되니 당연히 이런 에러가 나는겁니다.
그러니...
여기엔 constant value만을 사용해야 합니다.
'E' 뭐 이런식의 값...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

jinushun의 이미지

Quote:
근데...
예측을 할 수 없는 define 문이 오게 되니 당연히 이런 에러가 나는겁니다.

답변 감사드립니다.

근데왜 define 가 예측을 못하는거죠?

값을 찍어보면 잘 나오는데.

값을 예측못한다는것이 저는 좀 이해가 안되는데요.

한번만더 조언을 부탁드립니다.^^

----------------------------
www.nate.com
----------------------------

jinushun의 이미지

앗..!!

죄송합니다.

컴파일 단계에서는 당연히 인식을 못하는군요 생각해보니.

-_-;;

답변 감사드립니다.!!

----------------------------
www.nate.com
----------------------------