본문 바로가기

C-programing/C언어 기초

[C언어기초] 전처리기란?

전처리기

 

- # include <stdio.h> 입출력 전처리기 호출

- # define 치환 역할

- # ifndef 매크로상수 재정의 방지, 조건부

- # if () 조건부, 조건식에 따라 전처리를 수행

 

전처리기는 전에 처리하는 기능이 있다고 해서, 전처리기 이다. C언어 초반에 #include<stdio.h>를 코딩하고, 본격적으로 프로그래밍을 시도하는데, 그것의 의미를 알아두면, 전처리기를 보다 쉽게 이해할 수 있다.

 

 

> # include <stdio.h>

 

요약하면, "전처리기(#)야 include라는 파일에 있는 stdio.h 헤더파일을 미리 실행해죠" 이다.

stdio.h 는 include라는 파일에 있는 헤더파일 -C언어 함수들이 압축되어 있는 파일이다- 이다. 전처리기는 이 파일을 컴파일러가 기능을 수행하기 전에 미리 처리한다.

 

 

 

 

위의 visual studio 10.0의 include 파일에 들어있는 stdio.h 파일이다.

그럼, stdio.h 파일이 무엇이길래 먼저 처리하도록 지시하는 것일까?

 

stdio.h 파일은 입출력 해더파일이다. 컴파일러가 인간의 언어를 기계어로 바꾸는 과정을 수행하기 전에, 이 코드를 해석 가능하게 하기 위한 입출력 -printf(), scanf() 등- 문법을 미리처리하도록 하는 것이다.

 

tip. main()함수를 호출하고 종료시키는 일을 하는 것은 운영체제이다. 운영체제는 window xp, unix 등이고, 컴퓨터와 프로그램 사이를 원활하게 해주는 인터페이스(interpace) 역할을 한다.

 

 

> # define

 

#define으로 시작하는 전처리 문장을 메크로라고 한다.

 

 

 

1. #define byte int

"byte를 int 자료형으로 정의하겠다"를 의미한다. 즉,  int a; 라고 변수선언해야 할 것을, byte a; 라고 선언해도 이상이 없다는 것이다.

 

2. #define name "배선하"

"name을 배선하로 정의하겠다"를 의미한다. 즉, printf("%s", "배선하"); 인 것을, printf("%s", name); 으로 코딩해도 이상 없다.

 

3. #define add(x, y) x*y

"add(x, y)라는 함수는 x와 y를 곱한 것이다." 를 의미한다. printf("%s", add(x, y)); 를 코딩하면, 곱한 값이 나온다.

 

#define은 여러가지 역할을 수행한다. 상수를 치환하고(2번), 자료형 -int, char, double- 을 정의하고(1번), 함수를 정의한다(3번). 나아가 #if, #ifndef 는 메크로 정의가 됬는가를 여부로 조건부 전처리를 수행한다.

 

 

 

 

> # if ()

 

 

1. #define CODE 1

"CODE를 1로 정의한다"를 의미한다.

 

2. #if(CODE==1)

"CODE가 1이라면, printf() 를 수행해라"를 의미한다. 미리 정의된 CODE의 값에 따라, #if 전처리기가 수행 될 수도 안 될 수도 있다.

 

3. #elif(CODE==0)

"위의 조건이 다르고, CODE==0이라면 아래 printf()를 수행해라"를 의미한다.

 

조건식이 참이면 해당되는 코드를 수행하고, 조건식이 거짓이면 건너띄는 구조이다.

 

 

> # ifndef

 

 

 

1. #ifndef MUL

"매크로 상수 MUL이 정의되어 있지 않다면 MUL을 만들어라" 를 의미한다. 아직, 치환 단계가 아닌, 만들기만 한 것이다.

 

2. #ifdef MUL

"매크로 상수 MUL이 정의되어 있다면, MUL을 다음과 같이 치환해라" 를 의미한다. MUL은 1*2로 2로 치환될 것이다. 이 함수는 MUL이 num*num1이라고 정의하지 않지만, 자동으로, MUL을 인식하기 때문에 따로 정의할 필요가 없다.

 

3.#ifndef MUL

"매크로 상수 MUL이 정의되어 있지 않다면, 다음과 같이 MUL을 정의해라" 의미한다.

 

 

전처리기는 크게 3가지 유형이다. 헤더파일을 전처리하는 것, 메크로를 처리하는 것, 조건부 처리하는 것 이렇게 3가지 유형이다. 프로그램 상, 절대 변하지 않을 수치를 쉽게 치환 하고 싶거나, 함수를 간단하게 정의할 때나, 이런 것들을 재정의 하여 오류가 뜨지 않도록 코딩 할 때, 전처리기가 필요하다.