>  기사  >  php教程  >  Assert() 함수 사용법 요약

Assert() 함수 사용법 요약

黄舟
黄舟원래의
2016-12-28 13:19:262001검색

Assert 매크로의 프로토타입은 b0f0cbacb9a934b30cb1dd71186a65c7에 정의되어 있습니다. 해당 기능은 조건이 오류를 반환하는 경우 프로그램 실행을 종료하는 것입니다. 프로토타입 정의:

#include <assert.h>
void assert( int expression );

Assert의 기능 현재 Expression을 계산하는 것입니다. 값이 false(즉, 0)이면 먼저 stderr에 오류 메시지를 인쇄한 다음 abort를 호출하여 프로그램을 종료합니다. 다음 프로그램 목록 badptr.c를 참조하세요.

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
       FILE *fp;
    
       fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
       assert( fp );                           //所以这里不会出错
       fclose( fp );
    
       fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
       assert( fp );                           //所以这里出错
       fclose( fp );                           //程序永远都执行不到这里来
       return 0;
}

[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# ./a.out
a. out: badptr.c:14: main: Assertion `fp'가 실패했습니다.

Assert() 사용의 단점은 빈번한 호출이 프로그램 성능에 큰 영향을 미치고 추가 오버헤드를 추가한다는 것입니다. 디버깅 후 #include b0f0cbacb9a934b30cb1dd71186a65c7가 포함된 문 앞에 #define NDEBUG를 삽입하여 Assert 호출을 비활성화할 수 있습니다. 샘플 코드는 다음과 같습니다.

#include <stdio.h>
#define NDEBUG
#include <assert.h>

사용 요약 및 주의 사항:

1)

int resetBufferSize(int nNewSize)
{
  //功能:改变缓冲区大小,
  //参数:nNewSize 缓冲区新长度
  //返回值:缓冲区当前长度 
  //说明:保持原信息内容不变     nNewSize<=0表示清除缓冲区
  assert(nNewSize >= 0);
  assert(nNewSize <= MAX_BUFFER_SIZE);
  ...
}

과 같이 함수 시작 부분에서 들어오는 매개 변수의 적법성을 확인합니다. 2) 여러 조건을 동시에 테스트할 때 각각의 Assert는 하나의 조건만 테스트합니다. , 어설션이 실패하면 어떤 조건이 실패했는지 직관적으로 판단할 수 없습니다. 예:

나쁨:

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

좋음:

assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);

3) 변경되는 문 어설션은 DEBUG에서만 적용되므로 환경을 사용할 수 없습니다. 이렇게 하면 프로그램이 실제로 실행될 때 다음과 같은 문제가 발생합니다.

오류:

assert(i++ < 100);

이는 실행 전 i=100과 같은 오류가 발생하면 이 명령문이 실행되지 않고 i++ 명령도 실행되지 않기 때문입니다.

정답:

assert(i < 100);
 i++;

4) Assert 및 후속 문은 논리적, 시각적 일관성을 유지하기 위해 빈 줄에 있어야 합니다.

5) 일부 장소에서는 Assert가 조건부 필터링을 대체할 수 없습니다.

위 내용은 Assert() 함수의 사용법을 요약한 것입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.