gpt4 book ai didi

c - 直接 C 程序中的错误处理有什么好的习惯用法吗?

转载 作者:太空狗 更新时间:2023-10-29 16:22:56 26 4
gpt4 key购买 nike

回到一些 C 语言工作。

我的许多函数看起来像这样:

int err = do_something(arg1, arg2, arg3, &result);

根据意图,结果由函数填充,返回值是调用的状态。

阴暗面是你会得到像这样天真的东西:

int err = func1(...);
if (!err) {
err = func2(...);
if (!err) {
err = func3(...);
}
}
return err;

我想我可以对它进行宏设置:

#define ERR(x) if (!err) { err = (x) }
int err = 0;
ERR(func1(...));
ERR(func2(...));
ERR(func3(...));
return err;

但这只有在我链接函数调用而不是做其他工作时才有效。

显然,Java、C#、C++ 有异常,非常适合这类事情。

我只是好奇现在其他人在他们的 C 程序中做了什么以及其他人如何处理错误。

最佳答案

如果您有需要在最后释放的资源,那么有时旧的可信赖的 goto 可以派上用场!

int
major_func(size_t len)
{
int err;
char *buf;

buf = malloc(len);

if (err = minor_func1(buf))
goto major_func_end;
if (err = minor_func2(buf))
goto major_func_end;
if (err = minor_func3(buf))
goto major_func_end;

major_func_end:
free(buf);
return err;
}

关于c - 直接 C 程序中的错误处理有什么好的习惯用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com