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 으로 작성된 부분은 선행처리기에 의해 치환
- Preprocessor >> 전처리기 라고도 함
- #define은 매크로라고 함
#include <.h> >> 헤더파일로 치환
#define A B >> A를 B로치환
- #define PI 3.14
- #define >> 지시자
- PI >> 몸체
- 3.14 >> 매크로 몸체
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. 원하는 결과를 얻기 위해 위 코드를 수정해 보세요.
- MUL(2+3)의 출력이 25가 나오도록 수정하면 됩니다.
매크로 상수는 굉장히 많이 쓰이며 사용하기도 쉽다 하지만 매크로 함수는 사용하기 까다로운 면이 있어 잘 사용하도록 해야 한다.
- 아래 코드는 컴파일러에 따라 사전에 에러를 잡아주기도 하지만 못 잡아주기도 한다.
- 무엇이 에러일까?