如果看到这个标题时,还不知道什么是errno,那么,你就和我一样.呵呵,我编程也有4,5年了,今天才知道errno.
errno不是我定义的一个变量,也不是否个随意的变量名,而是crt库中定义的一个全局变量
定义:errno Constants (
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_errno_Constants.asp)
#if (defined(_MT) || defined(_DLL)) && !defined(_MAC)
_CRTIMP extern int * __cdecl _errno(void);
#define errno (*_errno())
#else /* ndef _MT && ndef _DLL */
_CRTIMP extern int errno;
#endif /* _MT || _DLL */ 实际上,就是再一些crt函数调用后,errno会被赋值,表示函数调用的状态.有点类似window api中的GetLastError
这些crt函数包括fgetpos或者ftell和strtol之类.
在什么时候用它呢?看下面的一个例子:
const char* chTest = "123456789222299999999";
char* pStop = NULL;
int nValue = strtol(chTest, &pStop, 10);
int nError = errno;
if(nError == ERANGE)
perror(chTest);
这个时候,nValue = 0x7fffffff,你如果只是根据它来判断,是不知道实际上已经出错了.所以,这个时候必须借助errno来判断状态.
惭愧啊,今天才知道.今天看strtol的msdn文档,看到一句话For both functions,
errno is set to
ERANGE if overflow or underflow occurs.,我看了半天没有找到errno,后来一搜,才发现它居然是个全局变量.