天天看点

abort与assert

void    abort(void);终止程序执行,直接从调用的地方跳出。

头文件#include <stdlib.h>

#include <stdio.h>
#include <stdlib.h>

int main ()
{
   FILE *fp;
   fp = fopen( "abort.txt","r" );//文件并不存在
   if(fp == NULL) 
       abort(); 
   fclose(fp);//程序执行不到这里   
   return(0);
}
           

assert是宏,不是函数。定义在<assert.h>中

void    assert(int expression);

先计算expression的值,如果为假,调用abort()终止程序。

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

int main ()
{
   FILE *fp;
   fp = fopen( "abort.txt","r" );//文件并不存在 
   assert(fp != NULL);
   fclose(fp);//程序执行不到这里   
   return(0);
}
           

频繁调用assert会影响程序性能,一般调试所用。

调试完成后,可以在头文件<assert.h>前加入#define  NDEBUG,就可以忽略assert。

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

int main ()
{
   FILE *fp;
   fp = fopen( "abort.txt","r" );//文件并不存在 
   assert(fp != NULL);
   fclose(fp);   
   return(0);
}
           

继续阅读