[전처리기에 의한 매크로 처리]
[전처리기에 의한 전처리]
- 프로그램 작성 -> 컴파일 -> 링크 -> 실행파일 생성
- 프로그램 작성 -> 전처리 -> 컴파일 -> 링크 -> 실행파일 생성
[#define으로 시작하는 전처리기 지시자]
컴파일러에 의해 처리되는 것이 아니다
전처리기에게 단순 치환 작업을 요청할 때 사용되는 지시자 .
#define PI 3.1415
[매크로를 이용한 함수의 구현]
[메크로 함수란]
매크로를 기반으로 정의되는 함수 (함수가 아니라 매크로 . 단지 함수의 특성을 지닐 뿐)
#define SQUARE1(x) x*x
#define SQUARE2(x,y,z) (x+y+z)
int main(void)
{
SQUARE1(3);
}
- 장점 : 자료형에 독립적이며 , 실행 속도가 향상된다 (코드 에어리어 안 거치기에)
- 단점 : 구현과 디버깅이 어렵다
- 조건 : 함수의 크기가 작아야함 (실행 파일의 크기가 커질 수 있다)
[#을 이용한 전달 인자의 문자열화]
#include<stdio.h>
#define ADD(x, y) printf("x+y=%d \n",x+y)
int main(void)
{
ADD(3, 4);
return 0;
}
해당 예제는 x+y 문자열이 값에 따라 바뀌지 않는다는 문제가 있다.
이를 해결하기 위해 사용할 특성은
- "asd" "def" 가 있다면 "abcdef"로 합쳐진다
- #x를 한다면 문자열로 바꾸어 준다 ex)#x = "x"
#include<stdio.h>
#define ADD(x,y) printf( #x "+" #y "=%d \n", x+y)
int main (void)
{
ADD(3, 4);
//printf("3" "+" "4" "=%d \n", 3 + 4);
//printf("3 + 4 =%d\n", 3 + 4);
return 0;
}
[##을 이용한 토큰의 결합]
#include<stdio.h>
#define CONCAT(a, b) a##b
int main (void)
{
int arr[2]={100,200};
printf("%d \n", CONCAT(2, 4));
printf("%s \n", CONCAT("GOOD", "MORNING"));
printf("%d %d \n", CONCAT(arr,[0]), CONCAT(arr,[1]));
//printf("%d \n", 24);
//printf("%s \n", "GOODMORNING");
//printf("%d %d \n", arr[0], arr[1]);
return 0;
프로그램이 이해하는 최소단위의 결합
'C' 카테고리의 다른 글
23장 . 구조체와 사용자 정의 자료형 2 (0) | 2023.01.10 |
---|---|
22장 . 구조체와 사용자 정의 자료형 1 (0) | 2023.01.10 |
19강.함수 포인터와 void포인터 (0) | 2023.01.08 |
18강 . 다차원 배열 그리고 포인터 (0) | 2023.01.08 |
16장 . 다차원 배열 (0) | 2023.01.08 |