2013-05-31 7 views
1

이 매크로를 컴파일하려고하면 구문 오류가 발생합니다. C18은 함수 인라이닝을 지원하지 않으므로 매크로를 사용해야합니다. 정규 함수 호출을 사용하면 컴파일러의 ISR 오버 헤드가 훨씬 커집니다 (일반적으로 약 10 개의 어셈블리 명령어가 있고 함수 호출은 50이됩니다).C 매크로 구문 오류 (C18 컴파일러)

확인했는데 뒤쪽에 공백이 없습니다.

unsigned char uIndex; 

INCREMENT_IDX(&uIndex, MAX_QUEUE_SIZE) 

감사합니다 : 나는 매크로를 호출 할 때
#define INCREMENT_IDX(puIdx,uMax) uMax--;\ 
            if (*puIdx <= uMax)\ 
            {\ 
             (*puIdx)++;\ 
             if (*puIdx > uMax)\ 
             {\ 
              *puIdx = 0;\ 
             }\ 
            }\ 
            else\ 
            {\ 
             return(FALSE);\ 
            }\ 
            return(TRUE); 

그리고 컴파일러는 구문 오류가 발생합니다.


마음에 들지 않아 답변을 찾았습니다. 문제는 매크로를 "호출"할 때 다른 매크로를 "입력 매개 변수"로 사용하고 있다는 것입니다. 매크로이기 때문에 그냥 바꿀 뿐이므로 내부/임시 변수가 만들어지지 않습니다.

그래서, 난이 일을하여 고정 :

unsigned char uIndex, uMax = MAX_QUEUE_SIZE; 
INCREMENT_IDX(&uIndex, uMax) 

여러분 모두 감사합니다! :)

추신 : 나는이 질문에 답하기 위해 노력했지만, 8 시간 전에 게시 할 수 없었다. 그래서 여기에 답을 넣어 둡니다.

+0

마음에 들지 않으면 답변을 찾았습니다. 문제는 매크로를 "호출"할 때 "입력 매개 변수"로 다른 매크로를 사용하고 있기 때문입니다. 매크로이기 때문에 그냥 바꾸기 만하므로 내부/임시 변수가 만들어지지 않습니다. 그럼, 이렇게 수정했습니다 : 서명되지 않은 char uIndex, uMax = MAX_QUEUE_SIZE; INCREMENT_IDX (& uIndex, uMax); 감사합니다. – Hary

+1

당신이 당신의 질문에 대답하고있다 할지라도 그것을 대답으로 받아들이고 답을 받아들이는 것은 여전히 ​​습관적입니다. 그렇지 않으면 항상 대답하지 않은 질문으로 표시되며 향후 개발자는 필요한 솔루션을 찾지 못할 수도 있습니다. –

+0

안녕하세요. Tevo, 너무 오래 걸려서 죄송합니다. 이번에는 다시 로그인해야합니다. 방금 내 발견을 답으로 써달라고 귀하의 제안을 따랐습니다. – Hary

답변

0

아무렇지도 않게 답변을 찾았습니다. 문제는 매크로를 "호출"할 때 다른 매크로를 "입력 매개 변수"로 사용하고 있다는 것입니다. 매크로이기 때문에 그냥 바꿀 뿐이므로 내부/임시 변수가 만들어지지 않습니다.

그래서, 난이 일을하여 고정 :

unsigned char uIndex, uMax = MAX_QUEUE_SIZE; 
INCREMENT_IDX(&uIndex, uMax) 

여러분 모두 감사합니다! :)