编程技巧篇
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宏只用于调试,提醒开发人员某个条件不成立。对用户来说是没用的。

浙公网安备 33010602011771号