728x90
반응형
SMALL
매크로(Macro)란?
전처리기가 컴파일 전에 코드를 치환(텍스트 대체)하는 기능
- 컴파일 전에 처리되므로 실행 속도에 영향 없음
- 단순 텍스트 치환이므로 타입 검사 없음
매크로의 종류
상수 매크로
#define PI 3.14159
#define MAX_SIZE 100
#define NAME "홍길동"
int main() {
double radius = 5.0;
double area = PI * radius * radius; // 3.14159로 치환됨
int arr[MAX_SIZE]; // int arr[100]으로 치환됨
}
특징:
- 상수 값을 이름으로 관리
- 코드 가독성 향상
- 한 곳에서 수정하면 전체 반영
함수형 매크로
#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define ABS(x) ((x) < 0 ? -(x) : (x))
int main() {
int result = SQUARE(5); // ((5) * (5)) = 25
int max = MAX(10, 20); // 20
int absolute = ABS(-15); // 15
}
주의사항 ⚠️:
// 잘못된 예 - 괄호 없음
#define SQUARE(x) x * x
int result = SQUARE(3 + 2); // 3 + 2 * 3 + 2 = 11 (잘못됨!)
// 올바른 예 - 괄호 사용
#define SQUARE(x) ((x) * (x))
int result = SQUARE(3 + 2); // ((3 + 2) * (3 + 2)) = 25 (정확!)
함수 vs 매크로:
// 함수 - 타입 체크, 디버깅 쉬움, 느림
int square(int x) {
return x * x;
}
// 매크로 - 타입 체크 없음, 디버깅 어려움, 빠름
#define SQUARE(x) ((x) * (x))
미리 정의된 매크로
printf("파일명: %s\n", __FILE__); // 현재 파일명
printf("라인: %d\n", __LINE__); // 현재 줄 번호
printf("날짜: %s\n", __DATE__); // 컴파일 날짜
printf("시간: %s\n", __TIME__); // 컴파일 시간
printf("함수: %s\n", __func__); // 현재 함수명 (C99)
728x90
반응형
LIST