C 소스를 분석하다보면 맨 위에 #include 가 있고 그 근처에 #define이 있다.
#define 부분이 매크로(전처리기)인데
#define MAX 100
#define ADD(x) (x) * (x) 이런 식으로 정의를 하기도 하고, 연산을 하기도 한다.
매크로를 쓰면 변수마다 괄호도 일일이 해야하고(괄호 넣고/안 넣고 결과값 다름), 개행할 때마다 \를 넣어줘야하는데 차라리 함수를 쓰지 왜 매크로를 쓸까?
위의 내용을 정리하면 다음과 같다.
함수 : 소스코드 중복 ↓ / 코드의 재사용성 ↑ / 실행파일의 크기 ↓ / 호출시 스택 프레임이 일어나 속도 ↓
매크로 함수 : 실행파일의 크기 ↑ / 스택 프레임 사용 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; }