본문 바로가기

자료구조 & 알고리즘/자료구조

Macro vs Functions

어떠한 알고리즘을 구현할 때 매크로를 이용하는 방법이 있고 함수를 이용하는 방법이 있다.

매크로란 전치리문에서 수행하며 마치 상수를 정의하는 것과 비슷하다.

C언어에서는 #define 문을 사용하여 매크로를 선언한다.

예> #define TWO 2

이진탐색 알고리즘의 예를 통하여 함수를 사용하는 방법과 매크로를 사용하는 방법에 대하여 알아보자.


1 .Binary Search ( Iterative Version )

int binsearch ( int list[] , int searchnum , int left , int right ) {

  int middle;
    while ( left <=  right ){

       middle = ( left + right ) / 2 
       switch ( compare (list[ middle ],searchnum) ){

            case -1 : left = middle +1 ;
            case 0 : return middle;
            case 1 : right = middle -1 ;
       }
    }
  return -1;
}


//함수 이용방법
int compare ( int a, int b ) 
{
     if (a < b ) 
             return -1;
     else if ( a == b )
             return 0;
     else 
             return 1;
}


위의 이진탐색 알고리즘에서 두 수를 비교하는 역할은 compare라는 함수가 하고 있다.

이 부분을 매크로를 이용하여 보자.

가장 기본적인 매크로 사용법은 위에 나와있다.
매크로를 함수처럼 이용하기 위해서는 인자를 갖는 매크로의 사용법을 알아야한다.

2. 인자를 갖는 매크로 

#define SQUARE(x) x*x   

main(){

   int y ;
   y= 3;
    printf("%d\n" , SQUARE(y));
}

위의 결과는 3*3=9를 출력하게 된다.


3. compare 함수의 매크로 구현

위의 인자를 갖는 매크로를 이용하면 함수를 매크로로 구현할 수 있다.


#define COMPARE ( x,y )     (  ( (x) < (y) ) ? -1 : ((x) == (y))  ? 0 : 1 )

위의 매크로를 사용하면 이 부분이 

 switch ( COMPARE (list[ middle ],searchnum)) 로 바뀌게 된다.


일반적으로 수행속도는 함수보다는 매크로가 빠르다고 한다.