C++ Chapter 7.12 : assert 단언하기
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 7. 함수 : assert
단언하기
- 디버그 모드에서 디버깅시 뭐 때문에 에러가 났는지를 알 수 있는 유용한 키워드다.
- #include <cassert> 를 해주어야 사용이 가능하다.
🔔 assert
assert(조건)
: 이 조건식이 false 라면 런타임 에러가 나도록 한다.
#include <cassert>
using namespace std;
int main()
{
int number = 5;
assert(number == 4);
return 0;
}
- 위 코드는
Release
모드에선 아무런 문제가 없는 코드다. - 그러나
Debug
모드에선 에러를 발생한다.- assert(number == 4) : number 값이 4가 아닌 5이기 때문이다.
- 프로그래머가 직접 number값이 4가 맞는지 찍어보지 않더라도 number값이 4가 아니면 에러를 발생시켜주므로 디버깅시 편하다.
void printValue(const std::array<int, 5> &my_array, const int& ix)
{
assert(ix >= 0);
assert(ix <= my_array.size() - 1);
std::cout << my_array[ix] << std::endl;
}
int main()
{
std::array<int, 5> my_array{ 1, 2, 3, 4, 5 };
printValue(my_array, 100);
return 0;
}
디버그 모드로 실행했을 때 ix >= 0 조건과 ix <= my_array.size() - 1 조건에 위반되는 경우 런타임 에러를 발생시킨다.
Assertion failed: ix <= my_array.size() - 1, line 9
이런 식으로 정확히 어디에서 문제 발생했는지 찍어준다.
🔔 static_assert
static_assert(조건)
: 이 조건식이 false 라면 컴파일 에러가 나도록 한다. 바로 빨간 줄이 그어져 알 수 있도록 !
static_assert
에 들어가는 조건은 컴파일 타임에 결정될 수 있는 조건만 넣을 수 있다.
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이므로 컴파일 오류가 발생한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기