반응형
assert()
- assert(3)의 출력은 정해져 있지 않아 컴파일러마다 조금씩 다름.
- 일반적으로 assert가 발생된 소스의 파일 이름과 줄 번호를 알려주며 프로그램을 강제로 종료시킴.
- 프로그램 종료시에는 abort(3)을 사용하도록 되어 있음.
- assert(3)는 매크로 NDEBUG가 정의되어 있는 경우, ((void)0)으로 확장되어 실제로 기계어 코드를 만들어 내지 않는다.
예제)
#include <assert.h>
int
main(void)
{
int
main(void)
{
int a = -3;
assert(a > 0);
}
gcc -o test test.c
./test
test: test.c:7: main: Assertion `a > 0' failed.
./test
test: test.c:7: main: Assertion `a > 0' failed.
assert()의 적용 기준
assert를 사용해야 할지 에러 처리를 해야 할지의 판단 기준.
- 외부 입력(소켓, 키보드, 파일)으로부터 저장된 변수는 에러처리.
- 1 번이 아닌 설계상 값의 반드시 그 값이 어떠해야한다면
(NULL이 아니라던지, 0 보다 크거나 같아야한다던지) assert. - enum 값이 넘어다니는 곳은 assert.
- if else, if else chain 에서 맨마지막 else 에서 필요한 경우 assert(0)
- enum을 switch 로 해결할 때, default 에서 필요한 경우 assert(0)
- 리소스(메모리, 파일 디스크립터 등)를 해제할 경우 되도록 assert 로 해제할 리소스가 유효한지 확인.
확실하게 두번 해제하는 경우는 없도록 함.
참고
ASSERT()
반응형
'프로그래밍 > C C++' 카테고리의 다른 글
메모리 영역 (0) | 2013.04.20 |
---|---|
enum 열거형 (0) | 2013.03.22 |
크리티컬 섹션(Critical Section) (0) | 2013.03.21 |
% 서식문자 정리 (0) | 2013.03.01 |
프로그래밍/바이트 오더(byte order) (0) | 2011.03.15 |