더북(TheBook)

assert의 큰 장점은 간단한 매크로 선언만으로 오류를 완전히 사라지게 할 수 있다는 점이다. <cassert>를 포함하기 전에 NDEBUG를 정의할 수 있다.

#define NDEBUG
#include <cassert>

이렇게 하면 모든 단정을 비활성화한다. 즉, 실행 파일에서 아무런 동작을 하지 않는다. 디버그 모드와 릴리즈 모드를 번갈아가며 전환할 때마다 프로그램 소스를 변경하는 대신, 컴파일러 플래그(일반적으로 리눅스에서는 -D, 윈도에서는 /D를 사용한다)에 NDEBUG를 선언하는 게 더 낫다. 또한 코드도 더 깨끗하다.

g++ my_app.cpp -o my_app -O3 -DNDEBUG

핵심 커널에 단정이 있는 소프트웨어는 릴리즈 모드에서 단정을 비활성화하지 않을 경우 2배 이상 느려질 수 있다. CMake처럼 좋은 빌드 시스템은 릴리즈 모드의 컴파일 플래그에 -DNDEBUG를 자동으로 포함한다.

단정은 쉽게 비활성화할 수 있으므로, 다음 참고를 따르길 권한다.

Note≡ 방어적 프로그래밍

최대한 많은 속성을 테스트하라.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.