在errno.h,这个变量被声明为extern int errno;我的问题是,errno在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?
我在x86架构上使用linux和gcc.
成功时,该函数将转换后的整数作为long int值返回.如果无法执行有效转换,则返回零值.如果正确的值超出可表示值的范围,则返回LONG_MAX或LONG_MIN,并将全局变量errno设置为ERANGE.
想想strtol(str, (char**)NULL, 10);如果str是 "0\0"如何知道函数失败或仅已转换与串"0"号?
1)保留返回值,用于指示成功(非零值)、错误(0)。
2)使用 errno,perror 提供更多信息。关于错误的类型。
3)使用参数返回值。
如果可以,那么我可以定义自己的错误代码(不与现有代码冲突)并使用 errno 来设置/检索它们。我认为现在我无法将 perror 与这些代码一起使用(它总是会说:未知错误),但我可以定义自己的基于 switch case 的函数来返回错误代码的描述。我可以定义自己的变量,但是为了使 errno现代化且线程安全,我们已经做了很多工作。
例如:
int val;
if(MyPop(&val))
pintf_s("\n %d popped from my stack. . .",val);
else
printf_s(Myperror());
Run Code Online (Sandbox Code Playgroud)
谢谢。