다음을 통해 공유


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 기반 응용 프로그램에서, assertOK 버튼과 함께 메시지를 보여주는 메시지박스를 생성하기 위해 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:: 어설션

참고 항목

참조

오류 처리(CRT)

프로세스 및 환경 제어

abort

raise

신호

_ASSERT, _ASSERTE 매크로

_DEBUG