系统程序员成长计划006第二章又快又好拾遗

assert机制介绍:http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html

 

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:

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

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:

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

 

 

 如果仅仅是想得到一个“参数无效”的返回值,assert就无能为力了,因为他只会立即终止程序。

而且这样一次只能测试一个参数的有效性,从出错处开始之后的所有assert的白写了。

assert(thiz != NULL);
if(thiz == NULL)
{
    return DLIST_RET_INVALID_PARAMS;
}

 

 

 

书中介绍了另一种方式:

定义两个宏,一个用于无返回值的函数,一个用于有返回值的函数:
#define return_if_fail(p) if(!(p)) \
                    {printf("%s:%d Warning: "#p" failed.\n", \
                   __func__, __LINE__); return;}
#define return_val_if_fail(p, ret) if(!(p)) \                   {printf("%s:%d Warning: "#p" failed.\n",\                   __func__, __LINE__); return (ret);} 这样一来,遇到无效参数时,可以看到一个警告信息,同时又不会影响自动测试往下进行。

 

=================================================================

编写Makefile

VIM被我设置成了,自动TAB变成4个空格。

所以输入TAB的时候,敲命令让他使用TAB。

:set tabstop=4 设定tab宽度为4个字符
:set shiftwidth=4 设定自动缩进为4个字符
:set expandtab 用space替代tab的输入
:set noexpandtab 不用space替代tab的输入

:set num 显示行号。

 

exe(空格): darray.o main.o

(TAB)  cc -o exe darray.o main.o

darray.o : darray.c darray.h

  cc -c darray.c

main.o : main.c

  cc -c main.c

clean :

  rm main.o darray.o exe

=================================================================

内存泄漏检测valgrind工具

valgrind ./exe即可,6到飞起!

 

=================================================================

留白

 

posted @ 2017-10-27 20:55  为民除害  阅读(126)  评论(0)    收藏  举报