전처리기 지시문은 소스 코드를 컴파일하기 전에 먼저 처리한다.
헤더 파일 삽입, 코드의 주석 제거, 문법 검토, 매크로등을 치환하는 역할을 수행한다.
항상 소스 코드 상단에 #include <stdio.h>라고 썼던 것이 전처리기문중 하나 이다.
=> C/C++ 코드를 실행하는 과정
- 순서 : 전처리기 -> 컴파일러 -> 어셈블러 -> 링커
파일 포함
#include 지시문을 사용하여 코드에 파일을 포함하는 데 사용한다.
// C언어 입출력 라이브러리 헤더파일
#include <stdio.h>
// 내가 만든 헤더파일
#include "myheader.h"
매크로 정의
매크로는 기본적으로 프로그램 전체에서 사용할 수 있는 상수 또는 코드의 일부를 정의할 수 있는 전처리기 지시문으로
#define 매크로 이름 값을 사용하여 정의 된다.
// #include를 사용하여 <stdio.h> 헤더파일 참조
#include <stdio.h>
// #define을 사용하여 PI 라는 키워드는 3.14159로 정의 된다.
#define PI 3.14159
#define SQUARE(x) ((x) * (x))
int main()
{
double radius = 5.0;
double area = PI * SQUARE(radius);
printf("반지름 : %f 원의 둘레 : %f\n", radius, area);
return 0;
}
조건부 컴파일
* 코드 설계 단계에서 적용을 잘 하면 실행 속도에 매우 큰 이득을 얻을 수 있다.
ㄴ 선택적 컴파일 기법
#define DEBUG 1
#ifdef DEBUG
printf("DEBUG 매크로가 정의 될 시 출력\n");
#else
printf("DEBUG 매크로가 정의 되지 않았을 시 출력\n");
#endif
그 외 전처리기
#undef
- 매크로 해제
pragma
- 컴파일러의 기능을 확장시킬 수 있게 나온 문법이며 어떤 동작을 정해주기 사용한다.
- 컴파일러 버전 또는 OS에 따라서 동작 여부가 결정 된다.
#pragma region 이름
- 코드를 개요, 축소가 가능하게 묶는다.
#pragma endregion
#pragma once
- 헤더 파일 중복 방지를 위해 사용하며 링크 할 때 헤더 파일이 한번만 포함하게 한다.
#pragma message("메세지 내용")
- 컴파일시 출력창에 메세지를 출력해준다.
- 협업 시 개발자에게 경고를 알려줄 때 사용한다.
효율성
ㄴ 매크로 vs 상수 => 효율이 상수가 압도적으로 좋다. (컴파일시간, 메모리 사용량)
전처리기를 효과적으로 사용하면 코드를 단순화하고 가독성을 높이며 조건부 컴파일을 활성화할 수 있으나
이름 충돌, 코드 부풀림, 복잡성 증가와 같은 잠재적인 문제가 발생할 수 있다.
'C, C++' 카테고리의 다른 글
20. namespace (0) | 2023.06.11 |
---|---|
19. C++ 언어 (0) | 2023.06.10 |
17. 열거형 (0) | 2023.06.08 |
16. 파일 입출력 (0) | 2023.06.07 |
15. 공용체 (0) | 2023.06.06 |