매크로 관료 질문과 답변을 정리한 내용입니다.
출처 : http://cafe.naver.com/lazydigital/delay
2-3. FND로 만드는 내 전화번호 표시기.. 코드연습 에서 답변으로
알려주신 재미있고 알찬 코드 내용에 다시한번 감사드리며 궁금한 점이 있어 질문드려봅니다.
#define DISP_LOC(x) (0x8 >> (x))
#define NUM_ARRAY(x) (sizeof(x)/sizeof(x[0]))
이 표현에서 실제로 궁금한 부분은 " (x) " 부분인데요 코드에서 "x" 인자에 대해 정의한 부분이 없는데
코드는 자연스럽게 컴파일 되서 빌드가 됩니다..
" x " 인자 부분은 avrstudio 에서 컴파일시에 어떻게 해석하고 받아 드리는지 궁금합니다.
>>> 매크로이며 CPP(c preprocessor)에 의해 그대로 바꿔줍니다.
즉
int a;
DISP_LOC(a);
이렇게 하면
컴파일러에 가기전 CPP에 의해
(0x8 >> (a));
이렇게 치환됩니다.
http://cafe.naver.com/lazydigital/34 <<매크로 관련 정리는 이곳을 참조해 보세요 .
아.. 그럼 (x)혹은 위의예제서 처럼(a)는 표현된 x 나 a 의 위치를 먼저 정의된 형태로 변형해주고 x나 a
에는 정의된 함수 및 변수를 대입해서 변형하는 역활만 하는군요.
함수와 비슷하긴 하지만, 인자의 타입이 없고
그냥 전달되는 곳에 그대로 바꿔 줍니다.
No comments:
Post a Comment