编程技巧篇

1 如果我们需要使用到多个双向链表,那么一般会如下定义:

struct A

{

  struct A * next;

  struct A * prev;

  ...........

};

使用这样的形式也无可厚非,但还可以进一步加以简化,如下:

#define DECL_LIST_MEMBER(type)     \

                                type* next;        \

                                type* prev

 

struct A

{

DECL_LIST_MEMBER(struct A);

..................

};

 

struct B

{

DECL_LIST_MEMBER(struct B);

...................

};

 

2 条件判断

有时我们在程序中会传一些索引值给函数,那么这个索引值必须在合法的范围内。譬如我们传一个数组索引给函数,而这个数组的最大值是MAX_ARRY_SIZE。那么就有必要对索引值进行判断。这时可以使用linux c库assert宏来判断。

assert宏定义在<assert.h>头文件中。如果在包含该头文件之前定义了NDEBUG宏,那么assert宏就会生效。否则不生效。

例如

#define NDEBUG

#include <assert.h>

assert(index>=0 && index < MAX_ARRY_SIZE);

当然,我们也可以定义自己的assert宏。当条件结果为false的时候,c库的assert宏将会打印“assertion fail.......”之类的信息并调用abort函数退出程序;我们可以定义自己的assert,只打印信息并不退出。

assert宏只用于调试,提醒开发人员某个条件不成立。对用户来说是没用的。

posted @ 2010-11-01 23:23  茫茫深海一条鱼  阅读(189)  评论(0)    收藏  举报