2011-09-16 20 views
1

我修改的旧代码,它使用了过时sys_errlistsys_nerr被弃用。有人能告诉我它的替代品吗?需要更换过时的阵列中的错误处理

它也将是巨大的,如果有人告诉我们它的功能。

下面是代码:

37 static const char * 
38 stringErrorReport(void) 
39 { 
40 #if (defined(sgi)) 
41   return strerror(oserror()); 
42 #elif (defined(_AIX)) 
43   return strerror(errno); 
44 #else 
45   if (errno > 0 && errno < sys_nerr) 
46     return sys_errlist[errno]; 
47   else 
48     return "Unknown error.\n"; 
49 #endif 
50 } 

让我知道如何更换过时sys_nerrsys_errlist[ ]

回答

1

这个函数是strerror的(包装),并试图提供它在系统自行更换它假定strerror()不可用。如果即使sys_errlist和sys_nerr不可用,它也会失败。但它至少尝试过...

+0

能否请您建议它的更换? – kingsmasher1

+0

特别是如何检查范围'errno> 0 && errno kingsmasher1

+0

它只是一个字符串数组(errno.h中常量的文本表示)它可能存在也可能不存在。系统头文件可能会或可能不会发布声明。如果你的系统有strerror()这样在它的库中,那么它将拥有这个表保存在某个地方。它可能会或可能不会对你有所帮助。 (但你可以通过从循环内部调用strerror()来查询它,这很愚蠢)显然,如果标识符sys_nerr(表大小)对于你的程序是不可见的,那么你不能对它进行测试。 – wildplasser