2015-02-15

FND로 만드는 내 전화번호 표시기 추가 질문

매크로 관료 질문과 답변을 정리한 내용입니다.

출처 : 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

Total Pageviews