<acronym id='k4phn'><em id='k4phn'></em><td id='k4phn'><div id='k4phn'></div></td></acronym><address id='k4phn'><big id='k4phn'><big id='k4phn'></big><legend id='k4phn'></legend></big></address>

<fieldset id='k4phn'></fieldset>

<i id='k4phn'></i>

    <code id='k4phn'><strong id='k4phn'></strong></code>
    <ins id='k4phn'></ins>
    1. <tr id='k4phn'><strong id='k4phn'></strong><small id='k4phn'></small><button id='k4phn'></button><li id='k4phn'><noscript id='k4phn'><big id='k4phn'></big><dt id='k4phn'></dt></noscript></li></tr><ol id='k4phn'><table id='k4phn'><blockquote id='k4phn'><tbody id='k4phn'></tbody></blockquote></table></ol><u id='k4phn'></u><kbd id='k4phn'><kbd id='k4phn'></kbd></kbd>

        <dl id='k4phn'></dl>

            <i id='k4phn'><div id='k4phn'><ins id='k4phn'></ins></div></i>
          1. <span id='k4phn'></span>
          2. linux系统下如何使用assert函数

            • 时间:
            • 浏览:16
            • 来源: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不能取代条件过滤