在C语言中,往往通过函数的返回值来判断函数的调用情况。例如,返回0,表示调用成功;返回-1,表示调用失败(函数执行失败,并且用errno来表示出错原因).也有一些函数使用多个值来表示函数的调用情况,例如,返回0,表示调用成功;返回1,表示调用失败,错误原因是文件打开失败;返回2,表示调用失败,错误原因是内存不足;如此等等.
下面介绍的这个方法是:将函数的返回值定义为一个枚举类型.
例如,在Cherokee的source中,有:
typedef enum {
ret_no_sys = -4,
ret_nomem = -3,
ret_deny = -2,
ret_error = -1,
ret_ok = 0,
ret_eof = 1,
ret_eof_have_data = 2,
ret_not_found = 3,
ret_file_not_found = 4,
ret_eagain = 5,
ret_ok_and_sent = 6
} ret_t;
可以看出,返回值被限定在-4~6的取值范围之内,并且每个取值的意义一目了然.
调用处可以这样写了:
ret = check_worker_version (argv[0]);
if (ret != ret_ok)
exit (EXIT_ERROR);