전처리기란?
- 다른 프로그램 영역과 독립적으로 처리해주는 기능
- 소스코드 파일 단위로 효력이 존재
이렇게만 표현하면 확 와닿지 않을겁니다!
좀 더 쉽게 표현하자면 #define처럼 치환의 역할을 하기도 하고, 디버깅에도 도움을 주며 헤더파일의 중복 포함도 방지해주는 놈이라고 생각하시면 됩니다.
그리고 전처리기에는 다양한 종류가 있는데 한번 살펴보도록 하겠습니다.
파일 포함 전처리기
1) #include는 전처리기에서 가장 많이 사용되는 문법입니다.
2) 특정한 파일을 라이브러리로서 포함시키기 위해 사용합니다.
3) #include 구문으로 가져 올 수 있는 파일에는 제약이 없습니다.
형태
#include "파일 이름"
- 현재 폴더에서 파일을 먼저 검색합니다.
- 만약 현재 폴더에 파일이 없다면 시스템 디렉토리에서 파일을 검색해서 가져옵니다.
#include <파일 이름>
- 시스템 디렉토리에서 파일을 검색합니다.
- os마다 시스템 디렉토리가 존재하는 경로가 다를 수 있습니다.
- 예를 들어 stdio.g string.h 등이 있습니다.
이번에는 직접 헤더파일을 만들어보고 적용해봅시다!
#temp.h
-----------------------------------------------
int add(int a, int b){
return a + b;
}
-----------------------------------------------
다음과 같이 temp.h를 해당 소스코드가 있는 디렉토리에 만들어주고
소스코드
------------------------------------------------
#include <stdio.h>
#include "temp.h"
int main(){
int a = 10, b = 5;
printf("%d\n", add(a+b));
return 0;
}
--------------------------------------------------
다음과 같이 소스코드에 #include "temp.h"를 선언해주면 add함수를 사용할 수 있게 됩니다.
여기서 주의할 점은 똑같은 헤더파일이 중복처리되지 않도록 하는것입니다.
매크로 전처리기
- 프로그램 내에서 사용되는 상수나 함수를 매크로 형태로 저장하기 위해 사용됩니다.
- #define 문법을 사용해 정의할 수 있습니다.
매크로 전처리기 사용하는 이유로는 소스코드의 양을 획기적으로 줄이는데 사용됩니다.
예를 들어
#define ll long long
#define ld long double
이렇게 사용하여 long long 이나 long double을 ll 또는 ld로 표현할 수 있게 합니다.
조건부 컴파일
- 컴파일이 이루어지는 영역을 지정하는 기법입니다.
- 일반적으로 디버깅과 소스코드 이식을 목적으로 하여 작성됩니다.
- C언어로 시스템 프로그램을 작성할 때에는 os에 따라서 소스코드가 달라질 수 있습니다.
- 이 때 운영체제에 따라서 컴파일이 수행되는 소스코드를 다르게 할 수 있습니다.
예를 들어 앞서서 헤더파일이 중복처리 되지 않게 하기 위해서 조건부 컴파일을 사용할 수 있습니다.
#temp.h
----------------------------------------
#ifndef _TEMP_H_
#define _TEMP_H_
int add(int a, int b){
return a + b;
}
#endif
-----------------------------------------
이렇게 작성하면 헤더파일 중복처리를 예방 할 수있습니다.
파일 분할 컴파일
헤더파일과 c언어 문법을 나눠서 정리 할 수 있습니다.
앞서서 작성한 헤더파일을 예시로 설명 드리겠습니다.
#temp.h
----------------------------------
#ifndef _TEMP_H_
#define _TEMP_H_
int add(int a, int b)
#endif
----------------------------------
#temp.c
----------------------------------
#include "temp.h"
int add(int a, int b){
return a + b;
}
-----------------------------------
다음과 같이 앞선 헤더파일을 저렇게 두개의 소스코드파일과 헤더파일로 나누어서 관리할 수 있습니다.
이상으로 전처리기를 알아보았습니다.
전처리기가 필수는 아니지만 이식성과 소스코드를 획기적으로 줄일 수 있는 방법이기 때문에 알아두면 좋습니다!
이상으로 포스팅 마무리하겠습니다 감사합니다!
'C-language' 카테고리의 다른 글
[C언어] 배열 array (0) | 2022.07.27 |
---|---|
c++ 클래스란 무엇일까 (0) | 2021.01.24 |
구조체와 파일입출력을 활용한 예제 (0) | 2021.01.23 |
파일 입출력이란?? (0) | 2021.01.23 |
구조체란 무엇일까 (0) | 2021.01.23 |