Native C++
- 조건부 컴파일의 활용
- 운영체제별 / 플랫폼별 코드를 한 파일 안에 같이 작성할 수 있다.
- 디버깅 코드 분리 가능.
- 특정 기능을 켜거나 끄는 기능 토글 옵션을 컴파일 시점에 결정할 때 사용한다.
- #ifdef
- 그 뒤에 오는 매크로 이름이 정의되어 있는지 확인하는 전처리기 지시자.
- 만약 뒤에 오는 매크로가 정의되어 있다면, 다음 조건부 컴파일 지시자 (#else, #elif) 또는 #endif 까지의 코드를 컴파일에 포함한다.
- 만약 매크로가 정의되어 있지 않다면, 해당 코드 블록은 컴파일러가 완전히 무시한다.
- 주석처럼 취급되는게 아니라, 애초에 없는 코드처럼 처리된다.
- 다른 조건부 컴파일 지시자
- #ifndef (if not defined) : 뒤에 오는 매크로가 정의되어 있지 않을 때 코드를 컴파일에 포함
- #if : 특정 상수 표현식의 값이 참일 때 코드를 컴파일에 포함
- #else : 이전 조건이 모두 거짓일 때 코드를 컴파일에 포함
- #elif (else if) : 이전 조건이 거짓일 때 다른 조건을 확인하고, 그 조건이 참일 때 코드를 컴파일에 포함
- assert() 매크로
- 내가 만든 함수에 절대로 들어오면 안되는 값이 들어오는 것을 막기 위해 사용
- <cassert> 헤더 파일에 정의되어 있는 매크로
- 인자로 받은 조건식이 true 인지 false인지 확인하는 역할을 한다
- 만약 조건 식이 거짓이라면
- 오류 메시지 출력
- 실패한 조건식의 텍스트
- 파일 이름
- 라인 번호
- 프로그램 중단 : 현재 실행 중인 프로그램 강제 종료
- 디버거 연결 (선택 사항) : 가능하다면 디버거를 활성화시켜서 개발자가 문제 발생 지점을 바로 확인할 수 있게 한다.
- 오류 메시지 출력
- 릴리즈 빌드에서는 제거된다.

- F9 : 토글 중단점 (Toggle BreakPoint)
- 중단점(Break Point)을 설정하거나 해제하는 단축키.
- F10 : 한 단계씩 프로시저 실행 (Step Over) → 함수 단위 실행
- F11 : 한 단계씩 코드 실행 (Step Into)
- 함수 내부의 동작이 궁금해서 직접 함수 안으로 들어가서 디버깅하고 싶을 때
- 디버그 모드가 아닌 다른 모드인 경우에 컴파일러가 특정 코드를 최적화 시킬 수도 있다.
언리얼 C++
- check(조건식), ensure(조건식) 구문
- 인자로 전달한 조건식이 거짓일 경우 check() 함수는 크래시를 발생시킴.
- ex. check(nullptr ≠ GameInstance)
- 보통은 check() 함수를 활용해서 추가적인 디버깅 정보를 출력함.
- ex. checkf(nullptr ≠ GameInstance, TEXT(”GameInstance is invalid”))
- 실행 중에 클래시가 발생되면 다시 빌드해야 함.
- 다시 빌드할 것 까진 아니고, 복구 로직을 작성해야 하는 경우를 찾고자 한다면 ensure()
- ex. ensure(nullptr ≠ GameInstance)
- 마찬가지로 ensureMsgf() 함수로 추가적인 디버깅 정보를 출력.
- ex. ensureMsgf(nullptr ≠ GameInstance, TEXT(”GameInstance is invalid.”))
- 예외처리와 checkf() 매크로 함수
- “이건 false 일 수도 있음. 이때는 그냥 처리 안하면 됨.” → 예외처리
- “이건 false 일 수가 없음. 이 로직을 실행하려는 사람에게 바로 알려야함.” → checkf()
- IsValid() 함수
- 런타임 중에 UObject 개체의 포인터가 유효한지 검사 할때 쓰는 함수.
- 널포인터인지 아닌지만 검사하면 Pending Kill 이나 GC(Garbage Collection)의 대상인 경우를 확인 할 수 없음.
- IsVaild() 함수를 활용하면 위 세 가지를 모두 체크해줌. 문제없다면 true 반환.
'언리얼엔진5 공부' 카테고리의 다른 글
| RPC(Remote Procedure Call) (0) | 2025.11.19 |
|---|---|
| ENetMode (0) | 2025.11.18 |
| CDO (Class Default Object) (0) | 2025.11.16 |
| UObject (0) | 2025.11.14 |
| UHT, UBT, UAT, UBS, UMS (1) | 2025.11.13 |