게임 개발 메모장
[ C++ ] assert (단언하기) 함수 본문
- 디버그 모드에서 디버깅시 어떤 이유 때문에 에러가 났는지를 알 수 있는 유용한 키워드다.
- #include <cassert> 를 해주어야 사용이 가능하다.
1. assert(조건)
* 이 조건식이 false 라면 런타임 에러가 나도록 한다.
#include <cassert>
using namespace std;
int main()
{
int number = 5;
assert(number == 4);
return 0;
}
1) Release모드 에선 아무런 문제가 없는 코드.
2) 하지만, Debug모드에선 에러를 발생.
- assert(number == 4) : number 값이 4가 아닌 5이기 때문.
- 프로그래머가 직접 number값이 4가 맞는지 찍어보지 않더라도 number값이 4가 아니면 에러를 발생시켜주므로
디버깅 시 편함.
void printValue(const std::array<int, 5> &TestArray, const int& i)
{
assert(i >= 0);
assert(i <= TestArray.size() - 1);
std::cout << TestArray[i] << std::endl;
}
int main()
{
std::array<int, 5> TestArray{ 1, 2, 3, 4, 5 };
printValue(TestArray, 100);
return 0;
}
디버그 모드로 실행했을 때 i >= 0 조건과 i <= TestArray.size() - 1 조건에 위반되는 경우
런타임 에러를 발생시킨다.
Assertion failed: ix <= my_array.size() - 1, line 9
이런 식으로 정확히 어디에서 문제 발생했는지 찍어준다.
2. static_assert
* static_assert(조건) : 이 조건식이 false 라면 컴파일 에러가 나도록 한다.
바로 빨간 줄이 그어져 개발자가 바로 알 수 있도록 하고 조건은 컴파일 타임에 결정될 수 있는
조건만 넣을 수 있다.
int x = 4;
assert(x == 4); // 문제 없음
static_assert(x == 4); // 컴파일 오류 발생! 빨간 줄 그어짐
일반 변수 x에 4라는 값은 메모리가 실행 후 런타임시에 할당된다.
따라서 x == 4라는 조건식이 참인지는 컴파일 타임 때 결정되는 경우가 아니므로
그냥 assert에는 넣을 수 있지만 static_assert 조건 안에는 넣을 수 없다.
컴파일 때 참인지 따질 수 있는 조건식이 아니기 때문.
const int x = 4;
assert(x == 4); // 문제 없음
static_assert(x == 4); // 문제 없음
변수 x는 컴파일 때 이미 값이 4로 정해져 있는 const변수이기 때문에
이렇게 static_assert의 조건식으로 사용이 가능하다.
const int x = 10;
assert(x == 4);
static_assert(x == 4, "x should be 4"); // 컴파일 오류 발생! 빨간 줄 그어짐
static_assert는 실행시 “x should be 4” 이렇게 에러 메세지를 띄우게 할 수 있다.
조건식 (x == 4)는 false이므로 컴파일 오류가 발생한다.
'언리얼 엔진 > C++' 카테고리의 다른 글
[ C ++ ] Lambda 정리 (0) | 2023.12.04 |
---|---|
[ C++ ] 다중 if문으로 조건 쓰기 vs if문 안에 &&, || 로 한번에 조건 쓰기 (0) | 2023.11.29 |
[ C++ ] 전역 변수 vs 정적 변수 (0) | 2023.08.27 |
[ C++ ] 댕글링 포인터(Dangling Pointer)란? (0) | 2023.08.14 |
[ C++ ] RVO(Return Value Optimization), NRVO(Named Return Value Optimization) (0) | 2023.06.01 |