C

매크로 사용하는 이유 #define

C 소스를 분석하다보면 맨 위에 #include 가 있고 그 근처에 #define이 있다.
#define 부분이 매크로(전처리기)인데
#define MAX 100
#define ADD(x) (x) * (x) 이런 식으로 정의를 하기도 하고, 연산을 하기도 한다.
매크로를 쓰면 변수마다 괄호도 일일이 해야하고(괄호 넣고/안 넣고 결과값 다름), 개행할 때마다 \를 넣어줘야하는데 차라리 함수를 쓰지 왜 매크로를 쓸까?


https://social.msdn.microsoft.com/Forums/expression/ko-KR/ab0afa88-7837-43a3-af01-267ac2a87d24/-?forum=visualcplusko

위의 내용을 정리하면 다음과 같다.

함수 : 소스코드 중복 ↓ / 코드의 재사용성 ↑ / 실행파일의 크기 ↓ / 호출시 스택 프레임이 일어나 속도 ↓

매크로 함수 : 실행파일의 크기 ↑ / 스택 프레임 사용 X – 실행속도 ↑, 재귀 호출 X
코딩할 때는 함수처럼 구성, 컴파일시 날커딩으로 처리

그러나 함수의 장점인 코드의 재사용성 ↑, 소스코드 중복 ↓ 은 매크로에서 다음과 같이 해결할 수 있다.
: 매크로 함수의 #define을 헤더파일에 정의하고, 헤더파일을 include하면 해결이 된다.

[결론]

함수 : 속도가 느리지만 코딩하기 편함
매크로 함수 : 재귀 호출이 안 되지만 속도가 빠르다


* 참고

// 괄호 넣고, 안 넣고 차이 확인
 
#include<stdio.h>
#define SQUARE1(x) x*x
#define SQUARE2(x) ((x)*(x))
 
int main(){
    int a = 2+3;
    printf("SQ1 : %d\n", SQUARE1(2+3));
    printf("SQ2 : %d\n", SQUARE2(2+3));
 
    printf("a-SQ1 : %d\n", SQUARE1(a));
    printf("a-SQ2 : %d\n", SQUARE2(a));
 
    return 0;
}

 

Back To Top