Jas*_*ell 6 c c++ function status return-value
编写返回表示状态代码的int的C或C++函数的最佳实践是什么?
具体来说,我想了解客户端使用情况,但欢迎其他提示.
例如,我可以写这样的东西:
int foo() {
return 0; // because everything was cool
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它?
if (foo()) {
// what to do if false, e.g. non-zero, e.g. not OK
} else {
// what to do if true, e.g. zero, e.g. OK
}
Run Code Online (Sandbox Code Playgroud)
这应该有效,因为最佳实践通常要求状态代码0
表示一切正常,也0
意味着false
在布尔语句中.
但是,这不会很好,对:
if (!foo()) {
// what to do if true
} else {
// what to do if false
}
Run Code Online (Sandbox Code Playgroud)
我在C工作中使用它:
int err = foo();
if (err) {
// armageddon
}
Run Code Online (Sandbox Code Playgroud)
赋值和if可以组合,但是更复杂的函数调用会让人感到更加困惑,有些人会因条件中的赋值而感到困惑(而gcc讨厌它).
对于C++,如果可用的话我会更喜欢异常,否则就是上面的.
编辑:我建议在成功时返回0,其他任何错误.这就是unix命令行实用程序所做的事情.
如果您真的想以这种方式使用状态代码,请将它们与描述状态代码意图的一个enum
或一组#define
语句一起使用.
例如:
enum
{
kSuccess = 0,
kFailure = -1,
}
function foo()
{
return kSuccess;
}
if (kSuccess == foo())
{
// Handle successful call to foo
}
else
{
// Handle failed call to foo
}
Run Code Online (Sandbox Code Playgroud)
这样,意图很明确,并且当有人想要在将来使用或维护您的代码时,不会出现容易出错的猜测.