#define은 전처리기 지시자로 컴파일하기 전에 실행되는 컴파일러의 한 부분이다. 또한 기호 상수를 만들기 위한 지시자로 보통 매크로라고 한다. 매크로를 정의하는 방법은 다음과 같이 세미콜론을 사용하면 안된다. 이때 보통 매크로 이름은 대문자를 많이 사용한다. 즉, 정의한 매크로를 사용하면 컴파일하기 전에 해당 매크로에 정의한 값으로 변경이 되는 방식이다.
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void) {
int num[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
num[i] = i;
}
return 0;
}
위의 코드처럼 배열의 크기를 변경할 때도 해당 매크로의 정의에서 값만 변경해주면 모두 적용되기 때문에 훨씬 사용하기 편하다.
물론 매크로는 해제도 가능하다. 바로 #undef를 사용하는 방법이다.
#include <stdio.h>
#define ARRAY_SIZE 10
int main(void) {
printf("%d \n", ARRAY_SIZE);
#undef ARRAY_SIZE
#define ARRAY_SIZE 40
printf("%d \n", ARRAY_SIZE);
return 0;
}
위의 코드처럼 #define으로 정의된 매크로를 #undef를 이용해서 해제하고, 다시 #define으로 정의해서 사용할 수 있다.
또한 함수도 매크로 정의가 가능한데, 매크로 함수는 일반적 함수처럼 반환을 하는 개념이 아니라 입력된 인수를 치환할 내용으로 전개해서 사용한다. 아래 예제에서는 입력된 인수를 치환해서 변수에 저장해준다.
#include <stdio.h>
#define ADD(num1, num2) num1+num2
int main(void) {
int sum;
sum = ADD(5, 7);
printf("%d \n", sum);
return 0;
}
또한 매크로 함수도 함수처럼 여러 개의 매개변수를 가질 수 있는데, 대신 자료형이 없기 때문에 모든 값 적용이 가능하다. 따라서 원래 계획은 int형 자료를 계산하기 위해 매크로 함수를 정의했지만, 실수로 char형이나 float형이 인자로 넘어가도 에러가 발생하지 않고, 그대로 치환하여 실행한다는 것이다. 그리고 문자열을 같이 사용한다면, 다음과 같이 인수를 적어주는 것만으로도 %s 없이도 출력이 가능하다.
#include <stdio.h>
#define STR(str, num) printf(str"=%d \n", num);
int main(void) {
STR("입력된 숫자는", 10);
return 0;
}
인용
https://responding.tistory.com/31
'Language > C' 카테고리의 다른 글
C언어 메모리 조작 (memcpy, memmove) (0) | 2023.11.16 |
---|---|
#if, #elif, #else, #endif와 #ifdef, #ifndef, #endif 지시문 (0) | 2023.11.11 |
선언(declaration)과 정의(definition) (0) | 2023.11.05 |
구조체 (0) | 2023.11.05 |
키워드 _CRT_SEUCRE_NO_WARNINGS에 대하여 (0) | 2023.11.05 |