在C库中以一致的方式处理错误处理错误时,您认为"最佳实践"是什么?
我一直在考虑两种方式:
始终返回错误代码.典型的功能如下所示:
MYAPI_ERROR getObjectSize(MYAPIHandle h, int* returnedSize);
Run Code Online (Sandbox Code Playgroud)
始终提供错误指针方法:
int getObjectSize(MYAPIHandle h, MYAPI_ERROR* returnedError);
Run Code Online (Sandbox Code Playgroud)
使用第一种方法时,可以编写这样的代码,其中错误处理检查直接放在函数调用上:
int size;
if(getObjectSize(h, &size) != MYAPI_SUCCESS) {
// Error handling
}
Run Code Online (Sandbox Code Playgroud)
这看起来比错误处理代码更好.
MYAPIError error;
int size;
size = getObjectSize(h, &error);
if(error != MYAPI_SUCCESS) {
// Error handling
}
Run Code Online (Sandbox Code Playgroud)
但是,我认为使用返回值返回数据会使代码更具可读性.很明显,在第二个示例中,某些内容被写入了size变量.
您对我为什么应该选择这些方法或者将它们混合或使用其他方法有任何想法吗?我不是全局错误状态的粉丝,因为它往往会使库的多线程使用更加痛苦.
编辑:只要他们不涉及异常,C++关于此的具体想法也会很有趣,因为目前我不能选择...
可能重复:
C代码中的错误处理
假设你有一个功能:
int MightWork(){
// if it works
return x;
// if it fails
return y;
}
Run Code Online (Sandbox Code Playgroud)
x和y应该是什么?
因为我有另一个功能:
if (MightWork){
// do stuff #1
}else{
// do stuff #2
}
Run Code Online (Sandbox Code Playgroud)
我知道对于这个特定的例子,使用返回值1将使第二个代码块"do stuff#1"并且使用返回值0将第二个代码块带到"do stuff#2"
我的问题是C中首选的样式是什么?函数的返回值0表示成功,其他任何值表示失败吗?或相反亦然?或者0以下的值?
我想确保我用当前的样式编写我的C代码.谢谢!
根据我的理解,你可以在bash中使用C-style for和while循环.
LIMIT=10
for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
do
echo -n "$a "
done # A construct borrowed from 'ksh93'.
Run Code Online (Sandbox Code Playgroud)
甚至是三元运营商.
(( var0 = var1<98?9:21 ))
Run Code Online (Sandbox Code Playgroud)
你会怎么做这个if声明?
另外他们为什么不在C中实现大括号呢?什么是使用这些关键字,如逻辑done,do,if,和fi?我将编写一些脚本,但bash看起来非常不同.
有没有任何bash样式技术或bash替代品/插件?我想遵循标准,但来自C,Java和PHP背景bash看起来很奇怪.可维护性和标准很重要.