65 – 전처리기(매크로 정의)

#define을 이용하여 기호 상수 PI를 정의하는 것을 이전에 한 번 예제로 보여줬는데, 바로 그것이 매크로다. 즉, 프로그램을 작성할 때 반복 기술되는 명령어나 수식이 사용자가 별도의 이름을 부여할 수 있는 기능이 매크로다. 매크로에는 매개변수를 사용하지 않는 경우와 매개변수를 사용하는 경우가 있다. 정의 형식이 다른데, 형식은 다음과 같다.

#define 매크로이름 치환문자열
#define 매크로이름(매개변수들) 매개변수를포함하는치환문자열

배개변수를 사용하는 매크로는 예시를 보면 좀 알 수 있을 거 같다.

#define ADD(A, B) ((A) + (B))

ADD는 매크로 이름, A랑 B는 매개변수, ((A) + (B))는 치환 문자열이다. 여기서 주의할 사항은 매크로 이름인 ADD와 매개변수의 목록인 A,B 사이를 띄우면 안된다는 점이다.

일단 예시를 보도록 하자. 매개변수가 없는 매크로의 예시는 다음과 같다.

스크린샷 2017-04-21 오후 4.40.37스크린샷 2017-04-21 오후 4.40.50

전처리를 하여 문장 중의 매크로가 해당 문자열로 바뀐 상황이다.

다음은 매개변수가 있는 매크로를 이용해 두 수 중에 큰 수를 구하는 프로그램이다.

스크린샷 2017-04-21 오후 4.41.08스크린샷 2017-04-21 오후 4.41.25

매개변수가 있는 매크로는 함수와 거의 유사하지만, 컴파일 할 때 링크 과정을 거치지 않아도 되므로 함수를 불러오는 시간이 절약되는 장점이 있다.

이런 매크로를 정의하는 지시자뿐만 아니라 이미 정의된 매크로를 해제하는 지시자도 있는데, 바로 #undef문이다. 예시를 보도록 하자. 먼저 정의했던 SIZE 매크로를 실행 도중에 #undef로 해제한 다음에 다시 #define으로 정의하는 코드가 있다. 그로 인해 실행 결과가 바뀐다.

스크린샷 2017-04-21 오후 4.41.45스크린샷 2017-04-21 오후 4.41.55

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.