atol.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 52 行

C
52
字号
/* @(#)atol.c	4.1 (Berkeley) 12/21/80 */#include <limits.h>#include <errno.h>longatol(p)register char *p;{        long maxover = LONG_MAX/10;  /* check for overflow */        long maxunder = LONG_MIN/10; /* check for underflow */        int errflg = 0;	long n;	register int f;	n = 0;	f = 0;	for(;;p++) {		switch(*p) {		case ' ':		case '\t':			continue;		case '-':			f++;		case '+':			p++;		}		break;	}	while(*p >= '0' && *p <= '9')        {                if(n > maxover || n < maxunder)                        errflg++;                n = n*10;                if(f)                {                        if(LONG_MIN + n > -(*p - '0'))                                errflg++;                }                else                        if(LONG_MAX - n < *p - '0')                                errflg++;                n += *p++ - '0';        }        if(errflg)        {                errno = ERANGE;                return(f ? LONG_MIN : LONG_MAX);        }        else                return(f? -n: n);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?