본문 바로가기
일상/공부

[ C언어 ] 전처리

728x90
반응형

이번에는 C언어의 전처리(preprocess)와 전처리기(preprocessor), 전처리 지시자인 #include와 #define에 대해 

자세하게 알아보도록 하자.


전처리, 전처리기


전처리(preprocess)전처리기(preprocessor)에 의해 컴파일러가 컴파일하기 전에 수행되는 작업을 의미한다.

전처리기는 전처리 결과인 전처리 출력파일을 만들어 컴파일러에게 보내고, 컴파일러는 전처리기가 생성한 소스를 컴파일 한다.

전처리 과정에는 전처리 지시자인 #include로 헤더파일을 삽입하거나 #define에 의해 정의된 상수를 대체시키는 등의 경우가 있다.

  • 전처리 지시자(preprocess directives): 전처리 과정에서 처리되는 문장, 항상 #으로 시작
  • C언어의 일반적인 문장과는 달리, 마지막에 세미콜론(;)이 없다!

전처리 지시자 #include

#include

#include헤더파일을 삽입하는 지시자이다. 아래 코드는 헤더파일 stdio.h를 해당 위치에 삽입하는 역할을 수행한다

#include <stdio.h>

 

 

 

헤더파일(header file)

헤더파일전처리 지시자인 #include, #define, 자료형의 재정의(ty-pedef), 함수원형(prototype) 정의 등의 문장이 있는 텍스트 파일이다.

우리는 #include 지시자로 적당한 헤더파일(header file)을 삽입해야한다. 해더파일의 확장자는 .h이다.

 

주요 헤더파일

헤더파일 파일이름 파일내용
stdio.h standard input output(표준 입출력) 표준 입출력 함수와 상수
stdlib.h standard library(표준 함수) 주요 메모리 할당 함수와 상수
math.h math 수학 관련 함수와 상수
string.h string 문자열 관련 함수와 상수
time.h time 시간 관련 함수와 상수
ctype.h Character type 문자 관련 함수와 상수
limits.h limits 정수 상수 등 여러 상수
float.h float 부동소수에 관련된 각종 상수

 

<stdio.h>

printf(), scanf(), putchar(), getchar() 등과 같은 입출력 함수의 정보가 정의된 헤더파일

=> 위 함수를 사용하기 위해선 반드시 stdio.h가 필요함


 

전처리 지시자 #define


#define

#define

전처리 지시자 #define매크로 상수를 정의하는 지시자이다. #define에 의한 심볼릭 상수는 주로 대문자 이름으로 정의하고, 이를 매크로 상수(macro constant)라고 부른다. 전처리기는 소스에서 정의된 매크로 상수를 모드 #define 지시자에서 정의된 문자열로 대체시킨다

 

예시를 통해 #define에 대해 알아보자!

#define indentifier_name [value]
  • indentifier_name은 전처리기에 의해 모두 value로 대체되어 컴파일된다

 

#define PI 3.14		//실수 매크로 상수
  • 지시자 #define: 정수, 실수 또는 문자열 등의 상수를 PI 등의 이름으로 정의
  • 매크로 상수 PI: 전처리 과정에서 모두 3.14라는 실수로 값이 바뀐 소스로 컴파일
  • 매크로 상수는 문자열 내부, 주석에서는 대체되지 않는다

 

 

매크로가 한 줄이 넘어간다면

모든 지시자는 한 줄에 하나의 지시자를 코딩해야하므로 끝에 역슬래쉬(\)를 넣어 줄이 계속되고 있음을 표시해야 한다

#define MESSAGE "나는 부자가 너무너무 되고 싶고 \
							티스토리도 잘 되면 좋겠는데, 파리만 날린다 하하^^"

 

반응형