Learning
When: 1학년 11월 9일
How:
#include에 대해 배웠는데 작동 방식을 까먹어서 복습할 겸 빌드 과정을 글로 썼고, 빌드 과정을 쓰고 나니 전처리 과정에서 #if, #else 같은 전처리 지시문들이 실행된다는 것을 알아 이것들에 대해 간단히 쓰게 되었습니다.
Understanding:
- 간단 설명: 전처리 지시문은 전처리 과정에서 전처리기가 해야 할 일을 적어놓은 문장입니다.
예를 들어 #include<iostream>이라는 문장은 전처리할 때 iostream이라는 헤더파일을 불러오라는 명령입니다.
그럼, 전처리기가 iostream이라는 헤더 파일을 찾아서 그 자리에 복사, 붙여넣기 같은 작업을 해주는데,
이와 같이 컴파일을 하며 소스 코드를 어셈블리어로 바꾸기 전에 소스 코드를 정상화하는 작업을
전처리라고 하고, 전처리 지시문은 말 그대로 전처리를 할 때 전처리기에게 지시할 문장입니다.
참고로 #if 계열에서 5.5 같은 부동 소수점 형식은 검사할 수 없습니다.
| #define | #define GRAVITY, #define GRAVITY 9.8 | include는 방금 예시를 들며 설명했듯 헤더 파일을 불러오라는 명령입니다. |
| #include | #include<iostream> | 방금 예시를 들며 설명했듯 헤더 파일을 불러오라는 명령입니다. |
| #ifdef | #ifdef GRAVITY | 방금 설명한 define으로 지정된 매크로가 있는지 검사하여 있다면 바로 아래의 줄부터 #endif를 만날 때 까지의 코드를 컴파일하고, 없다면 컴파일하지 않습니다. |
| #ifndef | #ifndef GRAVITY | define으로 지정된 매크로가 없다면 코드를 컴파일합니다. |
| #if | #if GRAVITY == 9.8 | 조건식이 맞을 때만 코드를 컴파일합니다. |
| #elif | #elif GRAVITY == 1.63 | if 아래에서 if문이 참이 아닐 때 다시 한번 조건식을 검사하여 참이라면 코드를 컴파일합니다. |
| #else | #else | if문 맨 아래에서 모든 조건문이 참이 아니라면 코드를 컴파일합니다. |
| #endif | #endif | #if 계열의 코드 맨 아래에서 컴파일 여부를 정하는 범위를 끝냅니다. |
| #error | #define VERSION #if VERSION == 1 #error "버전이 1입니다." #endif |
오류를 발생시켜 빌드를 끝냅니다. |
| #pragma | #pragma once | 전처리기에게 특별한 명령을 전달합니다. 왼쪽의 코드는 이 헤더 파일을 중복해서 불러올 수 없게 하는 명령입니다. |
Result: 확실히 C++을 배우니 C#을 쓸 때 공부할 수 있었지만 배우지 않은 심화 내용을 공부할 수 있게 되어 좋은 것 같습니다.
'C++' 카테고리의 다른 글
| [C++] 포인터, delete (0) | 2025.12.01 |
|---|---|
| [C++] 입력과 출력 (0) | 2025.11.14 |
| [C++] signed, unsigned 키워드, 2의 보수 (0) | 2025.11.13 |
| [C++] class와 struct (C# 하던 사람 관점) (0) | 2025.11.10 |
| [C++] 빌드 (Build) (0) | 2025.11.08 |