#define은 매크로 상수를 정의하는 전처리기입니다.
#define (이름) (값) 형식으로 씁니다.(값은 생략 가능)
#include <stdio.h>
#define BASE 12
int main() {
float a = 1 / BASE;//1 / 12
float b = BASE * 3;//36
return 0;
}
위와 같이 일반 변수처럼 쓸 수 있습니다. 그러나 일반 변수와 다르게 BASE에 12가 치환되는 것입니다.
즉, float a = 1 / BASE 코드는 float a = 1 / 12코드로 변합니다.
그렇기 때문에 BASE = 2; 같이 값을 변경하려 하면,
코드가 12 = 2;와 같기 때문에 오류가 납니다.
그리고 값에 단순한 단일 숫자가 아니라 식, 문자열 등 원하는 문자를 모두 쓸 수 있습니다.
단순히 치환되는 것이기 때문에 뭔 값을 넣던 일단은 상관이 없습니다.
#include <stdio.h>
#define VALUE 1 + 2
int main() {
int i = VALUE * 3;
return 0;
}
위에서 i 값이 9가 될 것 같지만 실제로는 7이 됩니다. VALUE는 숫자 3이 아니라 1 + 2식이기 때문입니다. 그래서 VALUE * 3;에 1 + 2를 넣으면 1 + 2 * 3이 됩니다. 그러므로 우리가 원하는 9가 나오려면
#define VALUE (1 + 2)
방식으로 괄호를 붙여줘야 합니다.
그리고 매크로 함수라는 것을 만들 수 있는데 형식은 다음과 같습니다.
#define (이름)((인수), (인수2)…) (값)
#include <stdio.h>
#define ADD(a,b) ((a) + (b))
int main() {
int i = ADD(1, 2);
return 0;
}
여기서 일반 함수와 다르게 인수에 인수 타입이 없는 것을 볼 수 있는데 단순히 인수 값이 a와 b에 치환이 되는 것이기 때문에 필요 없습니다. 그래서
int i = ADD(1, 2);
는
int i = ((1) + (2));
가 됩니다.