>  기사  >  웹 프론트엔드  >  Assert() 함수 사용법 요약(권장)

Assert() 함수 사용법 요약(권장)

高洛峰
高洛峰원래의
2017-02-03 14:29:181647검색

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

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

Assert 그 기능은 표현식 표현식을 평가하는 것입니다. 값이 false(즉, 0)이면 먼저 stderr에 오류 메시지를 인쇄한 다음 중단을 호출하여 프로그램을 종료합니다. 다음 프로그램 목록 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&#39; failed.

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(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

좋음:

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

3) Assert는 DEBUG에서만 적용되므로 환경을 변경하는 문을 사용할 수 없습니다. 이렇게 하면 프로그램 실행 시 문제가 발생합니다.

Error:

assert(i++ < 100);

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

정답:

assert(i < 100);
i++;

4) Assert 및 후속 문은 논리적이고 시각적인 일관성을 만들기 위해 빈 줄이어야 합니다.

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

위는 에디터가 소개한 Assert() 함수 사용법을 요약한 것입니다. 궁금하신 사항이 있으시면 메시지를 남겨주시면 에디터가 답변해 드리겠습니다. 시간에.

더 많은 Assert() 함수 사용법 요약(권장) 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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