더북(TheBook)

이번에는 프리미티브(primitive)를 이용하여 이런 함수를 구현하는 방법을 살펴보자. 먼저 Strtoul_inner 함수 코드부터 살펴보자. 이 함수는 strtoul 구현의 핵심으로써 반복문에서 hexatridecimal을 통해 스트링에서 큰 정수 값을 계산한다.

 

strtoul.c

31 unsigned long Strtoul_inner(char const s[static 1],
32                             size_t i,
33                             unsigned base) {
34   unsigned long ret = 0;
35   while (s[i]) {
36     unsigned c = hexatridecimal(s[i]);
37     if (c >= base) break;
38     /* 64비트에서 표현할 수 있는 가장 큰 값은
39         베이스 36으로 3w5e11264sgsf다. */
40     if (ULONG_MAX/base < ret) {
41       ret = ULONG_MAX;
42       errno = ERANGE;
43       break;
44     }
45     ret *= base;
46     ret += c;
47     ++i;
48   }
49   return ret;
50 }
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.