C언어. #define 매크로 알아보기

1 분 소요

🌟 #define 매크로란?

#define 매크로는

#define 매크로명 내용

이런 식으로 사용되며, 전처리기가 처리하므로 컴파일 되기 전에 처리된다. #define 매크로는 프로그램이 돌아가는 도중 매크로에 해당하는 값이 있으면 매크로의 값으로 치환한다.

말로 해선 모르니, 실제로 해보자!

🌟 사용법

#include <stdio.h>

#define PI 3.14

int main()
{
    float radius = 5f;
    float cicle = radius * radius * PI;
    
    return 0;
}

간단하게 이런 식으로 쓸 수 있다. #define 매크로는 변하지 않는 값을 넣어야 하며, PI는 변하지 않으니 PI 3.14를 저장하고 실제 코드에서 사용할 수 있다.

보통 이런 상수는 어느 변수의 MAX나 배열의 SIZE를 결정할 때 많이 사용된다.


#include <stdio.h>

#define HELLO printf("hello, world!");

int main()
{
    HELLO;
    
    return 0;
}

이렇게 사용하는 방법도 있다. 매크로에 간단한 함수를 구현한 것!

#include <stdio.h>

#define ADD(X, Y) ((X)+(Y))

int main()
{
    int a = 5;
    int b = 10;
    
    printf(ADD(a, b)); //15 출력
    
    return 0;
}

인자를 사용한 매크로는 저렇게 괄호를 쳐서 꽁꽁 감싸줘야 한다. ADD(X, Y)는 간단한 함수지만, X+Y으로 표현하면 #define 매크로 특성 상 문제가 생기기 때문이다.

☝ 문제란?

#include <stdio.h>

#define ADD(X, Y) X+Y

int main()
{
    int a = 5;
    int b = 10;
    
    printf(2 * ADD(a, b)); //2 * 5 + 10 = 20이 됨
    
    return 0;
}

괄호를 풀었을 때, 매크로 함수 주변에 다른 계산을 넣으면 프로그래머가 원하는 대로 계산이 안될 수가 있다. #define 매크로는 치환을 하기 때문에 위 주석처럼 처리해 원하는 값이 나오지 않는 경우가 있다.

내가 원하는 건 2 * ADD(a, b) = 2 * (5 + 10)이므로, 괄호를 쳐서 치환될 때 저런 일이 일어나지 않도록 방지해야 함!

🖐 잠깐, 참고로 매크로 함수도 여러 줄을 사용할 수 있다!

바로 ‘\’ 역슬래시를 사용하면 됨!

#include <stdio.h>

#define ADD(X, Y) ((X)+(Y)) \
		prtinf("Hello");

int main()
{
    int a = 5;
    int b = 10;
    
    ADD(5, 10)
    
    return 0;
}

이렇게 하면 인자를 더하는 것과 동시에 Hello가 출력될 것이다.

끝~

댓글남기기