1. [C 언어] 전처리 / 선행 처리
ㅇ 전처리 / 선행 처리 이란?
- 컴파일하기 전에 원시 프로그램을 단순 처리하는 컴파일러의 한부분
. 컴파일러에 특정 작업을 지시하는 부분으로써,
. 사실상, 단지 텍스트 조작에 불과하고,
. 문법이나 의미에 대해서는 거의 고려치 않음
ㅇ C 언어에서, 주요 전처리 기능 셋
- 헤더 파일을 병합/포함 (#include)하여 확장해 주는 기능
- 매크로 치환 (주로, #define 활용)
- 조건부 번역 (#if 등)
2. [C 언어] 전처리/선행처리를 위한 지시자
ㅇ (전처리 지시자)
- 컴파일 환경에 맞게 원시 프로그램을 처리하는 방법을 일러주는 지시자
ㅇ (유의할 점)
- 반드시 #로 시작함
- 한 줄에 하나씩 씀
- 통상 프로그램 첫 칸부터 쓰여짐
- 명령문 끝에 세미콜론(;)을 붙이지 않음
ㅇ (종류)
- 매크로 확장 지시자 : #define, #undef
- 조건부 컴파일 지시자 : #if, #else, #elif, #endif, #ifdef, #ifndef
- 외부 파일 지시자 : #include
- 기타 지시자 : #error, #line
3. [C 언어] 주요 전처리 (전처리 지시자) 例
ㅇ (특정 파일 병합)
- #include : 파일 포함
. <파일명> : C 언어 컴파일러 내 설정된 include 디렉토리에서 해당 파일을 찾음
. "파일명" : 현재, 소스 파일이 있는 디렉토리를 먼저 찾고,
후에, include 디렉토리를 찾음
ㅇ (매크로 지원)
- #define : 매크로 정의
. 例) #define 매크로명 값
.. (상수) #define ARRAY_SIZE 20 (매크로 상수 => 심볼릭 상수 참조)
.. (함수) #define ADD(a, b) a + b
- #undef : 매크로 정의 해제
ㅇ (조건부 컴파일 지원)
- 조건부 컴파일은,
. 목적 : 조건에 따라, 소스 코드의 해당 부분 `#if ~ #endif 등`의 컴파일 여부를 제어함
. 용도 : 플랫폼,운영체제 마다 다르게 컴파일,디버깅,테스트 등에 사용하는 등
- #if : 조건이 참일 경우
- #else : 조건이 거짓일 경우
- #ifdef : 매크로가 정의되어 있는 경우
- #ifndef : 매크로가 정의되어 있지 않은 경우
- #endif : 조건부 컴파일의 종료
ㅇ (컴파일 과정 지원)
- #line : 행번호 출력
- #pragma : 시스템 종별에 따라 다른 의미를 줌
ㅇ (기타)
- # : 매개변수를 한 쌍의 따옴표로 둘러싼 문자 형태로 변환
- ## : 문자열 결합하여 변수 이름 등을 만듬
. 例) #define CONCAT(a,b) a##b
.. CONCAT(c,d) => cd
. 例) #define CNMD(NAME) strcpy(NAME ## _cmd, #NAME)
.. CNMD(copy) => strcpy(copy_cmd,"copy")
※ 한편,
- 전처리 대상 및 결과 파일들은 모두가 읽을 수 있는 텍스트 형태의 파일 임