함수명 : 주장
헤더 파일 : <assert.h>
함수 프로토타입 : void 주장(int 표현식);
기능 : 표현식이 올바른지 확인
매개변수 : 표현식 값이 false(즉, 0)이면 먼저 stderr에 오류 메시지를 인쇄한 다음 abort를 호출하여 프로그램을 종료합니다.
반환값 : 반환값 없음
보충 :
1. 빈번한 호출은 프로그램 성능에 큰 영향을 미치고 추가적인 오버헤드를 증가시킵니다. 디버깅 후 #include <assert.h>가 포함된 문 앞에 #define NDEBUG를 삽입하여 어설션 호출을 비활성화할 수 있습니다.
2. 함수 시작 시 전달된 매개변수의 적법성을 확인합니다.
3. 각 Assert는 하나의 조건만 테스트합니다. 왜냐하면 여러 조건을 동시에 테스트할 때 Assertion이 실패하면 어떤 조건이 실패했는지 직관적으로 판단하는 것이 불가능하기 때문입니다.
4. 환경을 변경하는 문은 사용할 수 없습니다. 왜냐하면 Assert는 DEBUG에서만 적용되기 때문입니다. 이렇게 하면 프로그램이 실제로 실행 중일 때 Assert 문을 무시할 때 다음과 같은 문제가 발생합니다.
실수:
주장(i++<100);
이는 실행 전에 오류(예: i=100)가 발생하면 이 명령문이 실행되지 않고, 그 다음에는 i++ 명령도 실행되지 않기 때문입니다.
옳은:
주장(i<100);i++;
5. 논리적이고 시각적인 일관성을 유지하려면 주장과 다음 문 사이에 빈 줄이 있어야 합니다.
6. 어떤 곳에서는 Assert가 조건부 필터링을 대체할 수 없습니다. Assert는 예외를 처리하는 것이 아니라 명백한 오류를 방지하는 데 사용됩니다. 오류와 예외는 다릅니다. 오류는 발생해서는 안 되며 예외는 불가피합니다. C 언어 예외는 조건부 판단을 통해 처리할 수 있으며, 다른 언어에는 자체 예외 처리 메커니즘이 있습니다. Assert를 사용하는 아주 간단한 규칙은 메서드나 함수의 시작 부분에 사용하는 것입니다. 메서드 중간에 사용하는 경우 적절한지 신중하게 고려해야 합니다. 기능적 프로세스는 메소드 시작시 시작되지 않았으며 기능적 프로세스 실행 중에 발생하는 문제는 거의 모두 예외입니다.
프로그램 예 : 변수 a<80을 가정하고 결과를 출력
#include<assert.h>#include<stdio.h>intmain(void){inta=50;assert(a<80);//a<80을 주장하고, 0이면 오류 메시지를 출력하고 프로그램을 종료합니다. 그렇지 않으면 계속해서 printf(Assertaistruen);return(0);}을 실행합니다.
실행 결과:
주장