1. 전처리문
실제 컴파일 과정이 일어나기 전에 처리되는 문장을 의미합니다.
즉, 사용자가 작성한 코드를 컴파일 하기 전에 각 전처리문이 지시하는 내용을 수행 한 뒤에
컴파일 과정이 일어나게 됩니다.
2. 전처리문의 종류
전처리문은 항상 # 으로 시작합니다. 다음 설명하는 전처리문은 ANSI 표준 C 전처리문에 의한 내용입니다.
• 조건처리 기능 : #if, #ifdef, #ifndef, #else, #elif, #endif
• 파일처리 기능 : #include
• 에러처리 기능 : #error
• 정의 기능 : #define
• 디버깅 기능 : #inline
• 컴파일 옵션 제어 기능 : #pragma
3. 전처리문 특징
1. #include
헤더파일 또는 외부 소스파일을 포함시킬 때 사용합니다.
#include <stdio.h> |
2. #define
정의한 구문을 다른 형태로 치환하기 위한 매크로입니다.
#define VALUE 0
|
이후 VALUE 라는 구문을 쓰는 곳은 전부 0 으로 치환됩니다.
#define SUM(a, b) (a+b) |
이와 같은 형태를 매크로 함수라고 합니다.
함수를 사용하기 위해서 스택메모리를 할당 하는 것이 아닌
SUM(a, b) 의 구문을 사용하면, (a+b) 형태로 코드를 치환하게 됩니다.
3. #undef
#define 으로 정의해놓은 매크로를 무시하는 기능입니다.
#define SUM(a, b) (a+b) |
4. #if, #endif
#if 뒤에 값이 0 또는 0이 아닌 값이냐에 따라서, #if 와 endif 사이에 있는 코드가
컴파일 시에 포함 될지 안 될지 결정합니다.
참(0이 아닌 값) 일 경우에는 컴파일 시에 포함, 거짓(값이 0) 인 경우 컴파일 되지 않음.
#define VALUE 0 |
위 코드에서 VALUE 가 0으로 치환되기 때문에, #if 0 와 같습니다. 0 은 거짓으로 판별되기 때문에
hiddenfun() 함수는 컴파일 되지 않을 것입니다.
5. #ifdef, #endif
#ifdef 뒤에 값이 정의 되었는지 아닌지에 따라서, #ifdef 와 endif 사이에 있는 코드가
컴파일 시에 포함 될지 안 될지 결정합니다.
#ifdef 다음에 오는 구문이 이미 정의되어있는 매크로라면 컴파일 시에 포함
#ifdef 다음에 오는 구문이 정의되어있는 매크로가 아니라면 컴파일 시에 미포함
6. #ifndef, #endif
#ifndef 뒤에 값이 정의 되었는지 아닌지에 따라서, #ifndef 와 #endif 사이에 있는 코드가
컴파일 시에 포함 될지 안 될지 결정합니다.
#ifndef 다음에 오는 구문이 이미 정의되어있는 매크로라면 컴파일 시에 미포함
#ifndef 다음에 오는 구문이 정의되어있는 매크로가 아니라면 컴파일 시에 포함
7. #ifndef 와 #define을 통한 헤더 중복참지 방지
#ifndef GLOBAL |
GLOBAL 이라는 매크로가 정의되어 있지 않을 때에만 해당 소스코드를 컴파일 하게 됩니다.
한번 이상 포함된 이후에는 GLOBAL 이라는 매크로가 처음 정의가 된 이후기 때문에
중복해서 코드를 포함 시킬 수 없게 됩니다.
주로 C 방식에서 사용하는 방법이며, C++ 에서는 간편하게 #pragma once 라는 매크로가 제공됩니다.
8. #pragma
#pragma 는 컴파일러마다 고유하게 사용하도록 지정한 명령어 입니다.
따라서 그 종류는 컴파일러마다 다릅니다.
대표적인 구문으로는 #pragma once 가 있으며, 한번 포함된 헤더파일은 중복해서 포함되지 않도록
컴파일러에게 지시하는 명령어입니다.
9. #error
소스 라인에 직접 에러 메세지를 출력합니다. 즉, 전처리기가 #error 문을 확인하면 그 즉시
컴파일을 중단하고, 에러 메시지를 출력합니다.
#ifndef __cplusplus |
10. #line
#line 전처리문은 __LINE__, __FILE__ 매크로를 재정의 합니다.
__LIINE__ 과 __FILE__ 은 미리 #define 으로 정의되어 있는 매크로로써
__LINE__ 은 현재 진행하고 있는 코드의 줄 번호를 반환하며, __FILE__ 은 현재
컴파일 된 파일의 이름을 반환합니다.
cout << __FILE__ << endl; |
- by Raimondo
'정보 & 소식 > C, C++' 카테고리의 다른 글
[Effective C++] 클래스의 생성 (0) | 2016.05.18 |
---|---|
배열과 포인터 (0) | 2016.04.28 |
포인터와 운영체제 (0) | 2016.04.28 |
C언어 포인터 (0) | 2016.04.28 |
C언어 기본 자료형 (0) | 2016.04.28 |