자료실/C언어

C언어 - #define

자료수집중 2020. 7. 4.
반응형

 

#define은 전처리기 지시자로 컴파일하기 전에 실행되는 컴파일러의 한 부분입니다.

#define은 기호 상수를 만들기 위한 지시자로 보통 '매크로'라고 합니다.

 

매크로를 정의하는 방법은

#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사용합니다.

#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으로 정의해서 사용할 수 있습니다.

 

 

함수도 매크로 정의가 가능합니다.

#define 이름(인수1, 인수2, ...) 치환할내용

매크로 함수는 일반적 함수처럼 반환을 하는 개념이 아니라 입력된 인수를 치환할 내용으로 전개해서 사용합니다.

 

 

예제를 통해서 보면 정의한 매크로 함수를 이용해서 입력된 인수를 치환해서 변수에 저장해줍니다.

#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형이 인자로 넘어가도 애러가 발생하지 않고 그대로 치환하여 실행합니다

sum = ADD(5, 7); -> sum = ADD('c', 7); 변경해도 실행됩니다

 

 

만약 문자열을 같이 사용한다면

#include <stdio.h>

#define STR(str, num)  printf(str"=%d \n",num);
int main(void) {

	STR("입력된 숫자는", 10);
	return 0;
}

 

 

인수를 적어주는 것만으로도 %s 없이도 출력이 가능합니다.

printf(str"=%d \n",num); == printf("%s=%d \n",str,num);

 

댓글