C언어 표준과 책의 기술 범위

C언어는 1972년 벨 연구소의 데니스 리치가 B를 기반으로 만든 언어입니다. 1983년 미국 국가 표준 협회인 ANSI에서 ANSI X3.159-1989 표준을 지정한 것이 C언어 표준의 시작입니다. 1999년 C99 표준으로 잘 알려진 ISO/IEC 9899:1999를 출간하고 2005년에는 ANSI에서도 C99를 표준으로 채택합니다. 그리고 2011년에 C11 표준인 ISO/IEC 9989:2011을 출간합니다.

ANSI X3.159-1989 표준에서는 미국 국가 표준 협회에서 최초로 지정하였고 변수 이름과 함수 이름 등을 영어 알파벳과 언더 바, 숫자만 사용할 수 있습니다. char 형식도 다양한 기호와 숫자 문자, 영어 알파벳은 표현할 수 있지만 한글이나 한자 등을 표현하려면 문자열을 빌려서 표현해야 하는 한계를 갖고 있었죠. 또한 함수의 반환 형식을 명시하지 않아도 오류를 발생하지 않아 많은 부분에서 논리적 버그의 책임은 개발자의 몫이었습니다.

ISO 국제 표준 기구에서 제시한 C99에서는 다양한 국가의 언어를 수용하기 위해 wchar_t 형식을 추가하였고 함수의 반환 형식을 명확하게 명시하도록 제안했습니다. 하지만 여전히 문자열 복사나 문자열 입력 등의 다양한 함수에서 개발자가 선언한 버퍼의 크기를 표준 라이브러리 함수에서 전달받지 않아 버퍼 오버 플로우 문제점이 남아있었죠.

C11 표준에서는 다양한 버퍼 오버 플로우 문제가 있는 함수들을 버퍼의 크기를 입력 인자로 전달하게 수정하였습니다. 그리고 표준 라이브러리 내부에서 동적으로 개체를 만들어 포인터를 반환하는 함수를 포인터의 주소를 입력 인자로 전달받고 내부적으로 문제가 있을 때 에러 형식 값을 반환하게 수정하였습니다. 또한 asctime처럼 함수 내부에서 수행한 결과가 있는 메모리 주소를 반환하는 함수 중에 언제나 같은 주소를 반환하여 두 번 이상 호출했을 때 마지막 호출한 결과만 확인할 수 있었던 함수들도 포인터의 주소를 입력 인자로 전달하며 표준 라이브러리 함수 내부에서 값을 설정하고 문제가 있을 때 에러 형식 값을 전달하게 수정하였습니다.

이 책에서는 C99와 C11 표준을 포함하여 다양한 표준 라이브러리 함수들의 사용법을 소개할 것입니다. 이 책은 단순한 문법을 전달하기 보다는 표준 라이브러리 함수가 어떠한 역할을 하고 어떻게 사용하는지에 초점을 맞출 것입니다. 이를 통해 보다 효과적으로 C언어로 프로그래밍할 수 있기를 기대합니다.


STDIO.H

putchar puts printf getchar gets scanf gets_s scanf_s fopen fclose fputc fputc putc fputs fprintf fgetc getc fgets fscanf fscanf_s fopen_s sprintf sprintf_s sscanf sscanf_s vprintf fflush fwrite fread ftell fseek ferror feof perror clearerr fgetpos fsetpos

STRING.H

strlen strcpy strcpy_s strncpy strncpy_s strcmp strncmp strcat strcat_s strncat strncat_s strchr strrchr strstr strtok strtok_s strerror memcpy memmove memcmp memcpy_s memset

STDLIB.H

atof atoi atol atoll strtod strtof strtold strtol strtoll strtoul strtoull rand srand calloc free malloc realloc abort atexit exit getenv system bsearch qsort abs labs llabs div ldiv lldiv mblen mbtowc wctomb wctomb_s mbstowcs mbstowcs_s wcstombs wcstombs_s

TIME.H

clock difftime mktime time asctime asctime_s ctime ctime_s gmtime gmtime_s localtime localtime_s strftime

MATH.H

acos asin atan atan2 cos sin tan log1p ldexp log modf frexp hypot pow ceil floor fmod acosh asinh atanh cosh sinh tanh exp2 ilogb log2 logb scalbn cbrt erf erfc lgamma tgamma nearbyint lrint round lround trunc remainder remquo copysign nan nextafter nexttoward fdim fmax fmin fma 실수 판별식 매크로

ASSERT.H

CTYPE.H

isalnum isalpha isblank iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower, toupper