본문 바로가기

PL/C & C++

[C++] 전처리문

 

 

[C++] 전처리문

안녕하세요. 명월입니다. 이 글은 C++에서 전처리문에 대한 글입니다. 전처리문이란 C++이 컴파일해서 실행되기 전에 처리되는 소스 메크로라고 생각하면 됩니다. 간단한 예를 들면 debug 상태에서

nowonbun.tistory.com

전처리문의 종류는 총 12가지 정도 있습니다.

전처리기설명
조건부 포함 전처리문(Conditional inclusions)
#if 전처리 분기문 if에 해당됩니다. define에 정의 값을 비교합니다.
#elif 전처리 분기문 else if에 해당됩니다. define에 정의 값을 비교한다. elif 전처리문 단독으로 사용할 수 없습니다.
#else 전처리 분기문 else에 해당됩니다. else 전처리문 단독으로 사용할 수 없습니다.
#endif 전처리 분기문의 종료에 해당합니다.
#ifdef define 전처기문이 정의되어 있으면 해당된다.
#ifndef define 전처기문이 정의되어 않으면 해당된다.
매크로 정의 전처리문(macro definitions)
#define 전처리 매크로 및 상수 정의
#undef 정의된 전처리문을 무효화한다.
디버깅 라인 전처리문(Line control)
#line 이미 정의된 전처리문 __LINE__에 소스 정의 라인을 재정의하기 위한 전처리문
에러 탐지 전처리문(Error directive)
#error Runtime 중이 아닌 compile 단계에서 일부러 에러를 발생시킬 때 사용한다.
소스 포함 처리 전처리문(Source file inclusion)
#include 보통 해더 파일을 읽을 때 사용합니다. 최종 빌드 전의 이진 파일이 아닌 소스 형태의 파일을 읽을 때 사용합니다.
지시어 전처리문(Pragma directive)
#pragma pragma는 세가지 형태로 사용된다. 가장 많이 사용되는 #pragma once는 해더를 여러 곳에서 참조할 경우 한번만 읽는 기능, 즉, a.cpp 소스에서 common.h를 읽고 b.cpp 소스에서 common.h을 읽을 려고 할 때 a.cpp에서 먼저 읽었기 때문에 두번 읽지는 않는다.
#pragma comment(lib, 파일이름.lib) 등 해더 내에서 library 참조시에 사용된다. visual studio에 기본적으로 선언되어 있는 lib는 kernel32.lib, user32.lib, gdi32.lib, winspool.lib, comdlg32.lib, advapi32.lib, shell32.lib, ole32.lib, oleaut32.lib, uuid.lib, odbc32.lib, odbccp32.lib
#pragma warning(disable:4702)는 4702의 에러를 무시해 주는 전처리 문입니다.
사전 정의된 전처리문(Predefined macro names)
__LINE__ 컴파일 중인 소스 코드 파일의 현재 행을 나타내는 정수 값입니다.
__FILE__ 컴파일 중인 소스 파일의 추정 이름이 포함 된 문자열 리터럴입니다.
__DATE__ 컴파일 프로세스가 시작된 날짜를 포함하는 "Mmm dd yyyy"형식의 문자열 리터럴입니다.
__TIME__ 컴파일 프로세스가 시작된 시간을 포함하는 "hh : mm : ss"형식의 문자열 리터럴입니다.
__cplusplus 정수 값. 모든 C ++ 컴파일러에는이 상수가 일정한 값으로 정의되어 있습니다. (컴파일러의 버젼과 비슷한 설정)
__STDC_HOSTED__ 구현이 호스팅 된 구현 인 경우 (모든 표준 헤더 사용 가능) 그렇지 않으면 0입니다.