Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
관리 메뉴

OnlyOne

Preprocessor 본문

Control Engineering/C Programming

Preprocessor

Taesan Kim 2024. 9. 5. 18:56
본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.

Preprocessor

 

Intro

오늘은 전처리기와 매크로에 대해 다룬다. 

 

 

전처리기를 통해 소스 프로그램을 쉽게 변경하고 다른 실행환경에서 컴파일을 쉽게 만들 수 있다. 컴파일 타임에 동작한다. 

 

#include

복사 붙여넣기와 같다.

#include <stdio.h>
void print_a()
{
 	printf("a\n");
}
int main()
{
 	print_a();
}

 

 

#define

식별자 혹은 매크로를 정의할 때 사용된다.

참고로 식별자는 ALL_UPPER_SNAKE로 작성한다.

#include <stdio.h>
#define CODE 1
int main()
{
 	printf("define test: %d\n", CODE);
 	return 0;
}

컴파일 타임에서 식별자를 토큰으로 변경한다.

 

#include <stdio.h>
#define ARRAY_SIZE 10
int main()
{
 	int array[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 	for(int i = 0; i < ARRAY_SIZE; i++)
 		printf("array[%d]: %d\n", i, array[i]);
 	return 0;
}

 

 

매크로

#include <stdio.h>
#define MAX(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM1):(NUM2))
//매개변수 주변과 매크로 전체에는 무조건 소괄호를 넣어준다
int main()
{
 	int a = 1;
 	int b = 2;
 	printf("Max: %d\n", MAX(a, b));
 	return 0;
}

 

매크로는 간략하고, 구문 자체를 소스코드로 대체하기 때문에 빠르다는 장점이 있다. 하지만, 매개변수의 데이터 타입을 확인하지 않고, 코드가 여러줄인 경우 매크로를 만들 수도 없다. 코드를 대체하기 때문에 디버거에서 매크로를 지목하지 않는다. 

 

따라서 매크로는 간단한 형태의 함수만을 대체하도록 한다. 

 

매크로 예시

1. 단위 변환

#define _USE_MATH_DEFINES
#include <math.h>
#define DEG2RAD(X) ((X) * M_PI / 180.0)
#define RAD2DEG(X) ((X) * 180.0 * M_1_PI)
//Or
#define DEG2RAD (M_PI / 180.0)
#define RAD2DEG (180.0 * M_1_PI)

 

2. 최대/최소

#define MAX(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM1):(NUM2))
#define MIN(NUM1, NUM2) (((NUM1) > (NUM2))?(NUM2):(NUM1))

 

3. 단순 반복

#define LOOP(X, NUM) for(register int X = 0; X < (NUM); X++)

 

4. 범위 제한

#define CLAMP(NUM, MAX, MIN) (((NUM) > (MAX))?(MAX):(((NUM) < (MIN))?(MIN):(NUM)))

 

#if/#ifdef#ifndef

식별자가 선언되어 있는지 선언되어 있지 않은지 확인하는 식별자이다.

#include <stdio.h>
#define CODE
int main()
{
#ifdef CODE
 	printf("Defined CODE\n");
#endif
#ifndef CODE
 	printf("Not defined CODE\n");
#endif
 	return 0;
}

 

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

Memory&Pointer  (0) 2024.09.05
Function&Array  (0) 2024.09.04
배열(Array) 기초  (0) 2024.09.04
Practice[MAF]  (1) 2024.09.04
Practice[Integral]  (0) 2024.09.04