1. 어서션은 함수이거나 일반적으로 매크로를 통해서 구현되었다.
2. 어서션은 런타임을 통해서도 코드가 유효한지 확인할 수 있지만, 컴파일 타임에서도 검증하는 것을 가능케한다.
3. 애플리케이션을 실행하지 않고도 프로그래머가 세운 가정이 유효한지 확인할 수 있다.
4. 런타임 어서션은 조건부로 작동하기 때문에, 릴리즈로 빌드될 때, 사라진다. 따라서 매우 유용하다.
5. 표준 C++라이브러리 <cassert.h>는 표준 C 라이브러리 <assert.h>에서 Assert를 상속받았다.
#include <assert.h>
//#include <cassert>
/*
실행시, 디버그 에러가 출력되며
메시지 박스가 튀어나온다.
소스파일 이름과, 에러코드, 라인넘버까지 출력된다.
자동적으로 중단점이 발동된다.
또한 콘솔창에서도 같은 정보를 출력한다.
*/
auto main() ->int{
assert(4==5);
}
#include <crtdbg.h>
/*
crtdbg는 cassert와는 약간의 차이가 있다.
콘솔창에 아예 결과를 출력하지 않고,
중단점이 발동된다.
모든 결과를 메시지 박스에 출력한다.
*/
auto main() -> int{
_ASSERTE(4==5);
}
6. 글로벌 네임스페이스를 준수하고, 다른 어서션 매크로와 충돌을 피하기 위해서, 유저가 정의한 매크로를 사용한다.
#include <crtdbg.h>
#define ASSERT _ASSERTE
auto main() -> int {
ASSERT(4 == 5);
}
7. 스태틱 어서트는 C++ 언어 자체에 내장되어 있기 때문에, 헤더 파일이 필요 없으며, 당연하게도 메인 함수 밖에서도 작동 한다.
static_assert(sizeof(double) == 8, "err_1");
static_assert(sizeof(float) == 8, "err_2"); //빌드하기 전에 에러를 감지한다.
auto main() ->int
{
}
'C++' 카테고리의 다른 글
스마트 클래스 (0) | 2020.11.15 |
---|---|
클래스 구현 시, 생각해야 할 것 (0) | 2020.11.14 |
윈도우 HANDLE 과 COM 인터페이스에 대해서. (0) | 2020.11.14 |
쉐어드 포인터 (0) | 2020.11.14 |
유니크 포인터 (0) | 2020.11.13 |