전처리문 : 실질적인 컴파일 이전에 미리 처리되는 문장, 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업들을 먼저 수행함
기존의 방대한 소스 코드를 지우지 않고 활성/비활성 하는 데에 가장 많이 이용된다. 기존의 소스 코드를 건드리지 않는 상태에서 부분적인 컴파일!
- 파일 처리 전처리문 : #include
- 형태 정의 전처리문 : #define, #undef
- 조건 처리 전처리문 : #if, #ifdef, #ifndef, #else, #elif, #endif
- 에러 처리 전처리문 : #error
- 디버깅 전처리문 : #line
- 컴파일 옵션 처리 전처리문 : #pragma
조건 처리 전처리문은 어떤 조건에 대한 검사를 하고 그 결과를 참(0이 아닌 값) 또는 거짓(0)으로 돌려준다.
#if : ...이 참이라면
#ifdef : ...이 정의되어 있다면
#else : #if 나 #ifdef에 대응된다
#elif : "else + if"의 의미
#endif : #if, #ifdef, #infdef 이 끝났음을 알림
#include
#include <stdio.h> /* 이 위치에 stdio.h라는 파일을 포함시킨다. */
#include "text.h" /* 이 위치에 text.h라는 파일을 포함시킨다. */
'<...>'를 사용할 때와 '"..."'를 사용할 때의 차이점은 '<...>'는 컴파일러의 표준 포함 파일 디렉토리(또는 사용자가 별도로 지정해 준)에서 파일을 찾는 것을 기본으로 한다. 그리고 "..."'를 사용했을 때는 현재의 디렉토리를 기본으로 파일을 찾게 된다. 아예 디렉토리를 같이 지정할 수도 있다.
#include <C:\MYDIR\MYHEAD.H>
#include "C:\MYDIR\MYHEAD.H"
#define
상수값을 지정하기 위한 예약어로 매크로라고 부른다. 구문의 상수로 치환한다.
또한 #define은 함수 역활과 비슷하게 아래와 같이 쓰일 수 있다.
#define SUM(x) ((x) = (x) + (x))
동작원리는 함수와 같다. 말 그대로 main소스에서 SUM을 호출하면 옆에 있는 더하기 코드가 치환되는 것이다.
#define으로 정의할 수 있는 것은 숫자만이 아니다.
#define MYNAME "Young Hee"
printf(MYNAME);
라고 한다면 이는 전처리기에 의해
printf("Young Hee");와 같이 전개되는 것이다.
출처 : http://www.sosori.com/2009/09/전처리문의-종류include-define-ifdef.html
'언어 > C' 카테고리의 다른 글
getc() 함수를 사용했을 때의 오류 (0) | 2016.09.28 |
---|---|
함수 포인터 컴파일 오류 (0) | 2016.09.26 |
signed와 unsigned (0) | 2016.05.02 |
typedef (0) | 2016.05.02 |
static 변수 (0) | 2016.03.21 |