전처리문

언어/C 2016. 5. 2. 14:03

전처리문 : 실질적인 컴파일 이전에 미리 처리되는 문장, 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업들을 먼저 수행함

기존의 방대한 소스 코드를 지우지 않고 활성/비활성 하는 데에 가장 많이 이용된다. 기존의 소스 코드를 건드리지 않는 상태에서 부분적인 컴파일!


- 파일 처리 전처리문 : #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
Posted by 知彼知己百戰不殆
,