<i id='51ebt'><div id='51ebt'><ins id='51ebt'></ins></div></i>
    <span id='51ebt'></span><acronym id='51ebt'><em id='51ebt'></em><td id='51ebt'><div id='51ebt'></div></td></acronym><address id='51ebt'><big id='51ebt'><big id='51ebt'></big><legend id='51ebt'></legend></big></address>
      <i id='51ebt'></i>
      <fieldset id='51ebt'></fieldset>
      1. <ins id='51ebt'></ins>

        <code id='51ebt'><strong id='51ebt'></strong></code>

      2. <dl id='51ebt'></dl>
      3. <tr id='51ebt'><strong id='51ebt'></strong><small id='51ebt'></small><button id='51ebt'></button><li id='51ebt'><noscript id='51ebt'><big id='51ebt'></big><dt id='51ebt'></dt></noscript></li></tr><ol id='51ebt'><table id='51ebt'><blockquote id='51ebt'><tbody id='51ebt'></tbody></blockquote></table></ol><u id='51ebt'></u><kbd id='51ebt'><kbd id='51ebt'></kbd></kbd>

          linux系统下如何使用assert函数

          • 时间:
          • 浏览:6
          • 来源:124软件资讯网

              linux系统下使用assert函数的要领  。

              步骤如下:

              assert宏的原型界说在《assert.h》中  ,其作用是若是它的条件返回错误 ,则终止法式执行  ,原型界说:

              #include 《assert.h》

              void assert( int expression );

              assert的作用是现盘算表达式 expression  ,若是其值为假(即为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‘ failed.

              已放弃

              使用assert的弱点是  ,频仍的挪用会极大的影响法式的性能  ,增添分外的开销 。

              在调试竣事后  ,可以通过在包罗#include 《assert.h》的语句之前插入 #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)不能使用改变情况的语句  ,由于assert只在DEBUG个生效 ,若是这么做  ,会使用法式在真正运行时遇到问题

              错误: assert(i++ 《 100)

              这是由于若是堕落  ,好比在执行之前i=100  ,那么这条语句就不会执行  ,那么i++这条下令就没有执行  。

              准确: assert(i 《 100)

              i++;

              4)assert和后面的语句应空一行  ,以形成逻辑和视觉上的一致感

              5)有的地方  ,assert不能取代条件过滤