정보처리기사/프로그래밍 언어 활용

C언어 매크로 정리 (#define)

glorypang 2025. 10. 18. 23:43
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