이 매크로를 컴파일하려고하면 구문 오류가 발생합니다. 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 시간 전에 게시 할 수 없었다. 그래서 여기에 답을 넣어 둡니다.
마음에 들지 않으면 답변을 찾았습니다. 문제는 매크로를 "호출"할 때 "입력 매개 변수"로 다른 매크로를 사용하고 있기 때문입니다. 매크로이기 때문에 그냥 바꾸기 만하므로 내부/임시 변수가 만들어지지 않습니다. 그럼, 이렇게 수정했습니다 : 서명되지 않은 char uIndex, uMax = MAX_QUEUE_SIZE; INCREMENT_IDX (& uIndex, uMax); 감사합니다. – Hary
당신이 당신의 질문에 대답하고있다 할지라도 그것을 대답으로 받아들이고 답을 받아들이는 것은 여전히 습관적입니다. 그렇지 않으면 항상 대답하지 않은 질문으로 표시되며 향후 개발자는 필요한 솔루션을 찾지 못할 수도 있습니다. –
안녕하세요. Tevo, 너무 오래 걸려서 죄송합니다. 이번에는 다시 로그인해야합니다. 방금 내 발견을 답으로 써달라고 귀하의 제안을 따랐습니다. – Hary