관리 메뉴

FU11M00N

[C언어] C언어 매크로 정의 본문

Programming/C Language

[C언어] C언어 매크로 정의

호IT 2020. 4. 19. 22:04

1. #define 매크로?

C나 C++에서 자주쓰이는 #define은 매크로를 정의 해줄때 쓰는 키워드입니다.
매크로는 프로그램 내에서 컴파일러가 매크로를 만나게되면 대체할 문자열을 정의하라는 뜻입니다. 매크로는 컴파일러가 컴파일을 시작하기전에, 전처리가 #define으로 정의된 기호상수 등을 

확장 문자열로 변환을 시키는 동작이 일어납니다.

 

간단히 애기하자면 특정한 내용을 다른 내용으로 치환하고자 할 때 사용하는 전처리기입니다.

 

2. 매크로 상수

#define [매크로 상수명] [매크로 상수]
#define PI 3.14
이 의미는 3.14 매크로 상수를 PI라는 매크로 상수명에 치환을 하겠다는 의미입니다.
소스코드가 .obj 파일로 컴파일 되기전 위의 코드가 치환이 되어 컴파일을 합니다.

#include <stdio.h>
#define PI 3.14 //3.14를 PI에 치환 
#define MHJ "문호준" // 문호준을 MHJ에 치환 
int main(){
	printf("PI의 값은? %lf\n",PI);
	printf("MHJ의 값은? %s",MHJ);
	
	
	return 0;
}

예제 처럼 문자와 정수 상관없이 치환이 가능합니다.

 

매크로명은 대부분 대문자로 쓰고 이걸 안지켜도 되지만 암묵적인 약속..? 이라고 봐도될것같습니다.

 


매크로를 사용하게되면 프로그램의 가독성이 높아질뿐이 아니라 값이나크기가 변경되어도 해당 매크로의 상수 값만

변경해준다면  소스 코드의 전체에서 내용이 변경되므로 유지보수에 효율적입니다.

 

#include <stdio.h>


int main(){
	
	printf("__FILE__ %s\n",__FILE__); // 소스 코드 파일 이름 
	printf("__FILE__ %d\n",__LINE__);// 현재 소스 코드 라인 번호 
	printf("__FILE__ %s\n",__DATE__);// 소스 코드가 컴파일된 날짜 
	printf("__FILE__ %s\n",__TIME__);// 소스 코드가 컴파일된 시각 
	printf("__FILE__ %s\n",__TIMESTAMP__);// 소스 코드가 컴파일된 타임스탬프 


	return 0; 
}

사진 1-1

 

또한 C언어에서는 정의를 하지않아도 프로그램 개발에 도움을 주기위해 미리 정의가 되어있는 매크로들이 있습니다.

매크로 의미
__FILE__ 소스 코드 파일 이름
__LINE__ 현재 소스 코드 라인 번호
__DATE__ 소스 코드가 컴파일된 날짜
__TIME__ 소스 코드가 컴파일된 시각
__TIMESTAMP__ 소스 코드가 컴파일된 타임스탬프

위의 표에는 따로 정의를 해주지 않아도 사용할수있는 매크로들입니다.

#include <stdio.h>


int main(){
	
	printf("__FILE__ %s\n",__FILE__); // 소스 코드 파일 이름 
	printf("__FILE__ %d\n",__LINE__);// 현재 소스 코드 라인 번호 
	printf("__FILE__ %s\n",__DATE__);// 소스 코드가 컴파일된 날짜 
	printf("__FILE__ %s\n",__TIME__);// 소스 코드가 컴파일된 시각 
	printf("__FILE__ %s\n",__TIMESTAMP__);// 소스 코드가 컴파일된 타임스탬프 


	return 0; 
}

사진 1-2

 

'Programming > C Language' 카테고리의 다른 글

[C언어] Double Pointer  (0) 2020.08.13
[C언어] 단일 링크드리스트  (2) 2020.04.24
[C언어] printf 함수  (0) 2020.04.19
C언어 비트 연산자  (1) 2020.04.18
C언어 증감 연산자  (0) 2020.04.18
Comments