C언어. #define 매크로 알아보기
🌟 #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가 출력될 것이다.
끝~
댓글남기기