相关疑难解决方法(0)

errno线程安全吗?

errno.h,这个变量被声明为extern int errno;我的问题是,errno在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?

我在x86架构上使用linux和gcc.

c linux multithreading gcc

163
推荐指数
8
解决办法
4万
查看次数

直接C程序中任何错误处理的好习惯用法?

回到一些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 error-handling

29
推荐指数
5
解决办法
3796
查看次数

什么是在C++中返回错误代码的正确方法

我正在使用错误代码来处理我的c ++项目中的错误.问题是如何从一个应该返回一些变量/对象的函数返回错误代码.

考虑一下:

long val = myobject.doSomething();
Run Code Online (Sandbox Code Playgroud)

在这里,myobject是某个类的对象.如果doSomething函数遇到某些错误条件,那么它应该如何通知调用者(不使用异常).

可能的解决方案:

  1. 在类中有一个数据成员(比如err_),可以由调用者检查.但是,在共享同一个对象并调用相同函数的多线程应用程序中,这将是不安全的.
  2. 使用一些全局错误变量,在多线程环境中也是同样的问题.

现在如何通知调用者一些错误情况?

c++

22
推荐指数
5
解决办法
3万
查看次数

标签 统计

c ×2

c++ ×1

error-handling ×1

gcc ×1

linux ×1

multithreading ×1