본문 바로가기

C, C++

#define

#define 매크로 상수를 정의하는 전처리기입니다.

#define (이름) (값) 형식으로 씁니다.(값은 생략 가능)

#include <stdio.h>

#define BASE 12

int main() {
	float a = 1 / BASE;//1 / 12
    float b = BASE * 3;//36 
    return 0;
}

위와 같이 일반 변수처럼 쓸 수 있습니다. 그러나 일반 변수와 다르게 BASE12가 치환되는 것입니다.

즉, 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));

가 됩니다.

'C, C++' 카테고리의 다른 글

조건 매크로  (0) 2019.12.15
#, ##, \  (0) 2019.12.13
#include  (0) 2019.12.11
함수 호출 규약  (0) 2019.12.10
배열 포인터 함수 인수  (0) 2019.12.09