函数返回值

前言:

        对于函数,供别人调用,或自己内部调用,返回值可以传递很多信息,但返回值亦应该尽量简单明了的表达函数执行的结果或状态。

1. 定义通用的返回值

    每个编写的函数,如果需要返回函数的执行结果或者状态,返回这些通用的值。

   意义简单明了,而且通用。

  这种类值的定义记得加注释或者从命名就能知道意义较好[关于更多代码命名和代码注释可以参考《代码大全》]。

    例如:

/* Return value of the commands. */
#define CMD_SUCCESS              0
#define CMD_WARNING              1
#define CMD_ERR_NO_MATCH         2
#define CMD_ERR_AMBIGUOUS        3
#define CMD_ERR_INCOMPLETE       4
#define CMD_ERR_EXEED_ARGC_MAX   5
#define CMD_ERR_NOTHING_TODO     6

2. 失败或成功返回特定值,失败的错误码用全局变量保存

    Linux 下的大多函数的采用的是返回 -1 代表失败, >= 0 代表成功,函数调用出现错误时,使用 errno 来标识遇到的错误。

   错误码采用通用的宏

#define	EPERM		 1	/* Operation not permitted */
#define	ENOENT		 2	/* No such file or directory */
#define	ESRCH		 3	/* No such process */
#define	EINTR		 4	/* Interrupted system call */
#define	EIO		 5	/* I/O error */
#define	ENXIO		 6	/* No such device or address */
#define	E2BIG		 7	/* Argument list too long */
#define	ENOEXEC		 8	/* Exec format error */
#define	EBADF		 9	/* Bad file number */
#define	ECHILD		10	/* No child processes */
#define	EAGAIN		11	/* Try again */
#define	ENOMEM		12	/* Out of memory */


3.指针类函数返回

    失败返回 NULL[(void *) 0],成功则返回 非NULL 的地址值。

    例如分配内存函数。


4.不返回值,直接结束进程

    函数对于认为调用该函数或函数内部发生不可接受的错误时,此时的内部代码存在问题( BUG ),选择直接结束整个进程。

   一般是采用 assert 或类似机制来下断言。

   常用于参数的合法性检查和编写单元测试代码。

   开源的单元测试库 CUnit 就会使用很多断言:

/** Simple assertion.
 *  Reports failure with no other action.
 */
#define CU_ASSERT(value) \
  { CU_assertImplementation((value), __LINE__, #value, __FILE__, "", CU_FALSE); }

 也可以自己编写自己断言[关于断言,可以参考《C标准库》]

 

以上内容是阅读了开源项目 quagga(也称zebra)的某一处代码而写的感想,记录一下。

参考资料如下:

......

“网络是个神奇的东西”...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值