C++ Chapter 7.12 : assert 단언하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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이므로 컴파일 오류가 발생한다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기