在errno.h,这个变量被声明为extern int errno;我的问题是,errno在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?
我在x86架构上使用linux和gcc.
回到一些C工作.
我的许多功能看起来像这样:
int err = do_something(arg1, arg2, arg3, &result);
Run Code Online (Sandbox Code Playgroud)
意图结果由函数填充,返回值是调用的状态.
黑暗面是你得到这样的天真:
int err = func1(...);
if (!err) {
err = func2(...);
if (!err) {
err = func3(...);
}
}
return err;
Run Code Online (Sandbox Code Playgroud)
我想我可以宏观:
#define ERR(x) if (!err) { err = (x) }
int err = 0;
ERR(func1(...));
ERR(func2(...));
ERR(func3(...));
return err;
Run Code Online (Sandbox Code Playgroud)
但这只有在我连接函数调用时才有效,而不是做其他工作.
显然,Java,C#,C++有一些例外,可以很好地处理这些事情.
我只是好奇其他人做了什么,以及其他人如何在他们的C程序中进行错误处理.
我正在使用错误代码来处理我的c ++项目中的错误.问题是如何从一个应该返回一些变量/对象的函数返回错误代码.
考虑一下:
long val = myobject.doSomething();
Run Code Online (Sandbox Code Playgroud)
在这里,myobject是某个类的对象.如果doSomething函数遇到某些错误条件,那么它应该如何通知调用者(不使用异常).
可能的解决方案:
现在如何通知调用者一些错误情况?