graph TD
  A[작성한소스파일 .C
  #include ...
  #define PI 3.14
  int main
    int i = pi * 3 ] --> |선행처리기|B
  B[선행처리된소스파일
  printf scanf ...
  int main ...
  int x = 3.14 * 3] --> |컴파일러|C
  C[오브젝트파일
  01101010101010
  01010101010101
  ...]--> |링커|D[실행파일 .exe]
  

#include, #define 으로 작성된 부분은 선행처리기에 의해 치환

#include <.h> >> 헤더파일로 치환

#define A B >> A를 B로치환

Example

#include <stdio.h>
#include <stdlib.h>

#define NAME "Hong" //매크로 상수
#define AGE 20 //매크로 상수
#define PRINT_ADDR printf("korea\\n"); //매크로 함수
#define PRINT_INFO printf("%s, %d", NAME, AGE); //매크로 함수

int main()
{
	printf("%s\\n", NAME);
	printf("%d\\n", AGE);
	PRINT_ADDR;
	PRINT_INFO;
	
	return 0;
}

Quiz. 아래 코드의 출력 결과는?

#include <stdio.h>
#include <stdlib.h>

#define ADD(a) a+a
#define MUL(a) a*a

int main()
{
	int x = 10;
	printf("%d\\n", ADD(3));
	printf("%d\\n", ADD(x));
	printf("%d\\n", ADD(2+3));
	
	printf("\\n\\n");

	printf("%d\\n", MUL(3));
	printf("%d\\n", MUL(x));
	printf("%d\\n", MUL(2+3)); 

	return 0;
}

Practice. 원하는 결과를 얻기 위해 위 코드를 수정해 보세요.

매크로 상수는 굉장히 많이 쓰이며 사용하기도 쉽다 하지만 매크로 함수는 사용하기 까다로운 면이 있어 잘 사용하도록 해야 한다.