#01 선행처리기

View Comments



#01선행처리기 


**선행처리기 => 컴파일 이전의 처리

*소스 -> 선행처리기-> 선행처리된 소스 -> 컴파일러 -> 오브젝트파일 -> 링커 -> 실행파일

*선행처리기에서 단순히 #define 된 정보를 치환한다.

*모든 매크로에는 괄호가 들어가는게 선행처리될때 오해의 소지가 없다.

*두줄에 정의되려면 \ 를 사용하면 되고 아래와같이사용하면됨
     #define SQUARE(Z) \

     ((Z)*(Z))


**특징
*매크로함수는 일반함수에비해 속도가 빠름. 
     -함수의경우 별도의메모리공간 & 호출된함수의 이동 및 반환, 그러나 매크로는 바로치환.

*자료형에따라 별도로 함수를 정의하지 않아도도미.
     -전달되는 인자의 자료형에 구분받지 않아 의존적이지 않음.

*정의하기 까다롭다.
*디버깅하기 쉽지않다. => 선행처리후 컴파일러에의해 에러가감지됨으로, 값이 잘못됬지만 찾기위해선 논리적 혹 계산적 이슈를 체크해야함.

**뭐가 적당하냐
-작은크기의함수
-호출빈도수가 높은함수


**매크로 if문
#if num==0 //num 이 0 이면

#elif num==1

#endif


#ifdef Add //Add가정의되어있다면.

#endif


#ifndef Add //Add가 정의되어 있지 않다면

#endif



*문자열 치환
#define JOBS(a,b) #a "job is" #b

=>JOBS(pk,coder)


*##

#define setNum(a,b) a##00##b

=>setNum(10,20) ==> 100020




'C Language > C basis' 카테고리의 다른 글

#04 typedef  (0) 2016.04.27
#03 구조체와 포인터  (0) 2016.04.27
#02파일분할과 헤더파일  (0) 2016.04.27

0 Comments (+add yours?)

Leave a Reply

Tracbacks (+view to the desc.)