我正在编写一个程序,其中大多数使用的库函数在错误时返回 -1 并设置 errno。程序的行为是,如果发生错误,它就会退出。为了确定程序外部的确切退出点和错误(使用示例gdb
),我想使用以下方法:
err = func_1(..arglist_1..);
if(err != 0)
{
perror("func(..arglist..)");
return ((1u << 8) | errno);
}
//..
//.. some more funcs
//..
err = func_n(..arglist_n..);
if(err != 0)
{
perror("func(..arglist_n..)");
return (((unsigned)n << 8) | errno);
}
这里的问题是安全假设。
现实: errno被声明为extern int errno;
内部errno.h
假设 1:errno的值始终小于 255。
假设 2: errno始终为正。
根据 中定义的所有误差常数(EAGAIN 等)errno.h
,这些假设目前是正确的。这些在未来也能被假设为真的吗?
PS:我不想靠perror()
判断退出点。