assert(CRT)
식을 계산하고 결과가 false 일때, 진단 메시지를 출력하고 프로그램을 중단합니다.
void assert(
int expression
);
매개 변수
- expression
0이 아닌 값 또는 0으로 계산된 식(포인터 포함)입니다.
설명
assert 매크로는 일반적으로 프로그램이 올바르게 작동하지 않을때 false 로 계산하기 위해 expression 인수를 구현함으로써 프로그램을 개발하는 동안 논리적인 오류들을 식별하기 위해 사용됩니다. 디버깅이 완전히 끝나면, NDEBUG 식별자를 정의하여 소스 파일을 수정하지 않고 어썰션 검사를 끌 수 있습니다. NDEBUG 는 /D 명령줄 옵션 또는 #define 지시문을 사용하여 정의될 수 있습니다. NDEBUG 이 #define 을 사용하여 정의된 경우, 지시문은 ASSERT.H가 포함되기 전에 나타야만 합니다.
assert 는 expression 이 false (0) 을 계산할 때 진단 메시지를 출력하고 프로그램 실행을 종료하기 위해 abort 을 호출합니다. 만일 expression 이 true (0이 아닌)이면, 아무 작업도 수행되지 않습니다. 진단 메시지는 실패한 식과 소스 파일의 이름과 어설션이 실패한 곳의 줄 번호를 포함합니다.
와이드 문자에서 진단 메시지가 출력됩니다. 따라서, 만일 식에 유니코드 문자들이 있는 경우, 예상대로 작동합니다.
루틴에서 호출되는 응용프로그램의 형식에 따라 진단메시지의 대상이 달라집니다. 콘솔 응용프로그램들은 항상 stderr 를 통해 이 메시지를 받습니다. Windows 기반 응용 프로그램에서, assert 는 OK 버튼과 함께 메시지를 보여주는 메시지박스를 생성하기 위해 Windows MessageBox 함수를 호출합니다. 사용자가 확인을 클릭하면, 프로그램을 즉시 중단합니다.
런타임 라이브러리의 디버그 버전을 사용하여 응용 프로그램이 연결될 때, assert 는 세 가지 단추가 있는 메시지 상자를 만듭니다: 중단, 시도, 무시. 중단을 클릭하면, 프로그램을 즉시 중단합니다. 시도를 클릭하면, 디버거가 호출되고 만일 적시(JIT)디버깅을 설정한 경우, 사용자가 프로그램을 디버깅할 수 있습니다. 무시를 클릭하면, assert 는 정상적인 실행을 계속합니다: OK 버튼을 사용하여 메시지 상자를 만드는 것. 무시 를 클릭하는 것은 종종 "정의되지 않은 동작"의 결과를 만들 수 있습니다.
CRT 디버깅에 대한 자세한 내용은, CRT 디버깅 기술을 참조하세요.
assert 루틴은 C 런타임 라이브러리의 디버그 및 릴리스 버전에 사용할 수 있습니다. 다른 두 어설션 매크로, _ASSERT 와 _ASSERTE 는 항상 이용할 수 있지만, 이것은 오직 _DEBUG 프래그가 정의되었을 때 오직 그것을 전달하는 식으로 계산합니다.
요구 사항
루틴 |
필수 헤더 |
---|---|
assert |
<assert.h> |
예제
이 프로그램에서, analyze_string 함수는 문자열과 길이에 관련된 여러 조건을 테스트하기 위해 assert 함수를 사용합니다. 조건 중 하나라도 실패하면, 프로그램 오류 원인을 나타내는 메시지를 출력합니다.
// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>
void analyze_string( char *string ); // Prototype
int main( void )
{
char test1[] = "abc", *test2 = NULL, test3[] = "";
printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
analyze_string( test1 );
printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
analyze_string( test2 );
printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
analyze_string( test3 );
}
// Tests a string to see if it is NULL,
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
assert( string != NULL ); // Cannot be NULL
assert( *string != '\0' ); // Cannot be empty
assert( strlen( string ) > 2 ); // Length must exceed 2
}
해당 .NET Framework 항목
System::Diagnostics::Debug:: 어설션