系统程序员成长计划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到飞起!
=================================================================
留白