Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍 언어의 매크로란? #define 매크로 치환 완벽 가이드


매크로 치환(Macro Substitution)이란?

매크로 치환은 하나의 문자열을 다른 문자열로 대체해 주는 메커니즘으로, C 언어에서는 #define 지시어를 통해 구현할 수 있습니다.

매크로는 프로그램이 실행되기 전, 즉 컴파일 이전 단계에서 매크로 정의의 첫 번째 부분(first_part)을 두 번째 부분(second_part)으로 교체하는 역할을 합니다.

여기서 첫 번째 항목은 함수 형태일 수도 있고, 단순한 객체(상수나 수식)일 수도 있습니다.

매크로 기본 문법

C 언어에서 매크로를 정의하는 기본 문법은 다음과 같습니다.

#define first_part second_part

이렇게 정의하면 코드 전체에서 first_part가 등장할 때마다 second_part로 자동 치환됩니다.

예제 1: 제곱을 계산하는 함수형 매크로

아래 프로그램은 인자를 받아 제곱을 계산하는 함수형 매크로의 예시입니다. 코드 내 모든 square(b)는 실행 전에 b*b로 대체됩니다.

#include<stdio.h>
#define square(a) a*a
int main(){
int b,c;
printf("enter b element:");
scanf("%d",&b);
c=square(b); // 프로그램 실행 전에 c=b*b 로 치환됨
printf("%d",c);
return 0;
}

실행 결과

enter b element:4
16

사용자가 4를 입력하면 square(b)b*b, 즉 4*4=16으로 계산되어 출력됩니다.

예제 2: 수식을 담은 객체형 매크로

매크로에는 함수 형태뿐 아니라 복잡한 수식 자체를 정의할 수도 있습니다. 아래 예제는 매크로의 동작 방식을 보여주는 또 다른 프로그램입니다.

#include<stdio.h>
#define equation (a*b)+c
int main(){
    int a,b,c,d;
    printf("enter a,b,c elements:");
    scanf("%d %d %d",&a,&b,&c);
    d=equation; // 프로그램 실행 전에 d=(a*b)+c 로 치환됨
    printf("%d",d);
    return 0;
}

실행 결과

enter a,b,c elements: 4 7 9
37

a=4, b=7, c=9가 입력되면 equation(a*b)+c로 확장되어 (4*7)+9 = 37이 출력됩니다.

매크로 사용 시 주의사항

매크로는 단순한 텍스트 치환이기 때문에 연산자 우선순위 문제가 발생할 수 있습니다. 예를 들어 #define square(a) a*a처럼 정의하면 square(4+1)4+1*4+1로 확장되어 의도한 25가 아닌 10이라는 잘못된 결과가 나옵니다.

이러한 오류를 방지하려면 #define square(a) ((a)*(a))처럼 매개변수와 전체 수식을 괄호로 감싸는 것이 안전합니다. 또한 매크로는 디버깅이 어렵고 타입 검사를 받지 않으므로, 간단한 상수나 짧은 수식에 활용하는 것이 좋습니다.