공부/C || C++

C++ 전처리기(preprocessor)

sudo 2021. 7. 8. 02:50

전처리기란 컴파일 전에 실행되는 코드로써 #으로 시작한다.

 

종류로는 include, Macro 그리고 조건부 컴파일(Conditional compilation)이 있다.

 

1. include

다들 알다시피 컴파일러와 함께 제공되는 헤더파일은 <>를 이용해서 포함시키고, 따로 사용자가 작성한 헤더파일은 소스코드가 있는 경로 기준으로 해서 ""를 이용해서 포함시킨다. 예를 들어서 아래와 같다.

#include <iostream>	// 컴파일러에서 제공되는 헤더파일
#include "MemoryBlock.h" // 사용자 정의 헤더파일

2. Macro

Macro에는 #define을 이용해서 만들고 종류는 객체와 유사한 매크로와 함수와 유사한 매크로가 있다.

객체와 유사한 매크로는 다시 대체 텍스트가 있는 것과 없는 것으로 나뉘는데 예를 들면 아래와 같다.

#define MAX_DAMAGE 10000	// 지시자가 있는 매크로
#define MAX_DAMAGE	// 지시자가 없는 매크로

위와 같이 MAX_DAMAGE를 매크로로 설정해놓으면 MAX_DAMAGE를 쓴 부분은 컴파일시 10000으로 치환된다.

3. 조건부 컴파일(Conditional Compilation)

코드 출처:출처: https://boycoding.tistory.com/145 

#define PRINT_JOE // PRINT_JOE 정의

#include <iostream>

int main()
{
#ifdef PRINT_JOE 
	std::cout << "Joe" << std::endl; // 이것만 출력됨

#endif

#ifdef PRINT_BOB 
	std::cout << "Bob" << std::endl; 

#endif

PRINT_JOE가 define 되어 있으므로, Joe만 출력하고 Bob은 출력하지 않는다.

 

#define같은 경우 다양한 환경에서 테스트 해볼 때 사용한다고 하는데, 예전에 github 코드중에 memory pool, object pool, thread pool을 모두 구현하시고 각각의 모드를 #define으로 매크로 설정하고 테스트 하고 싶은 모드를 제외하고 나머지 매크로는 주석처리 하신 코드를 본 적 있는데 그런 방식으로 매크로를 쓰면 유용하게 쓸 수 있을 것 같다. 

 

 

Reference

https://boycoding.tistory.com/145

 

C++ 01.11 - 전처리기 (preprocesser)

01.11 - 전처리기 (preprocesser) 전처리기(preprocessor)는 프로그램을 컴파일할 때 컴파일 직전에 실행되는 별도의 프로그램이다. 전처리기가 실행되면 각 코드 파일에서 지시자(directives)를 찾는다. 지

boycoding.tistory.com