[C++] assert / static_assert
카테고리: Cpp
태그: Assert
이 글은 C++의 assert와 static_assert를 공부하고 정리한 글입니다
assert
- 실행 중에 가정(어서션, assertion)이 맞는지 평가
- 오직 디버그 빌드에서만 작동
- 실패한 assert를 보려면 반드시 프로그램을 실행해야 함
- 모든 코드 경로가 실행되었다고 어떻게 장담할까?
- 일부 어서션은 프로그램을 실행하기도 전에 알 수 있음
- 그래서 가능한 많은 곳에서 사용하자
- 디버그 과정에서 미리 버그를 잡는 좋은 습관이 됨
코드 예제
#include <cassert> const Student* Class::GetStudentInfo(const char* name) { assert(name != NULL); // 조건이 false면 실행을 멈춤 }
static_assert
- 컴파일 중에 어서션 평가
- 컴파일러가 aasert 조건이 참인지 아닌지 앎
- 실패하면 컴파일러는 컴파일 에러를 뱉음
-
많은 경우에 유용함
코드 예제
// 예시 1 : 구조체의 크기 static_assert(sizeof(Student) == 60, "Student structure size mismatch"); // 예시 2 : Version 확인하기 // Class.h class Class { public : const static int Version = 1; }; // Main.cpp #include "Class.h" static_assert(Class::Version > 1, "You need higher version than 1"); // 예시 3 : 배열의 길이 static_assert(sizeof(mArray) / sizeof(mArray[0]) == ARRAY_LENGTH, "The size of array is not ARRAY_LENGTH");
베스트 프랙티스
- 최대한 assert보다 static_assert를 사용
- assert를 사용한다면
- 여전히 프로그램을 실행시켜야 됨
- 실행 도중에만 어서션을 포착. 그것도 오직 디버그 빌드에서만
- static_assert를 사용한다면
- 컴파일 중에 모든 문제를 즉시 알아챔
- 또한 컴파일러처럼 생각하는 데도 도움이 됨
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기