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' 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 중국어 웹사이트를 주목하세요!