{{위키데이터 속성 추적}}
{{C 표준 라이브러리}}
'''C 표준 라이브러리'''(C standard library)는 C 언어를 위한 [[표준 라이브러리]]로서, ANSI C 표준에 의해 명시되었다.<ref name="c99io">International Organization for Standardization|International Electrotechnical Commission|IEC (1999). ''[[C99|ISO/IEC 9899:1999(E): Programming Languages - C]] §7.19.1 para 1''</ref> 이것은 상위 집합인 [[C POSIX 라이브러리]]와 동시에 개발되었다.<ref>{{웹 인용
 | url = http://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_1.html
 | title = The GNU C Library Introduction
 | accessdate = 2016-02-11
 | website = gnu.org
}}</ref><ref>{{웹 인용
 | url = http://stackoverflow.com/questions/9376837/difference-bewteen-c-standard-library-and-c-posix-library
 | title = Difference between C standard library and C POSIX library
 | year = 2012
 | accessdate = 2016-02-11
 | website = stackoverflow.com
}}</ref> ANSI C가 [[국제 표준화 기구]]에 의해서 채택됨에 따라,<ref name=ISOAdoptedAnsiC>{{웹 인용
 |title=C Standards
 |url=http://www.keil.com/support/docs/1893.htm
 |publisher=Keil
 |accessdate=2016-02-11}}</ref> C 표준 라이브러리는 또한 '''ISO C library'''로도 불린다.

C 표준 라이브러리는 매크로, 타입 정의 그리고 문자열 처리나 수학적 연산, 입출력 프로세스, 메모리 할당과 다른 운영 체제 서비스 같은 작업을 위한 함수들을 제공한다.

== 애플리케이션 프로그래밍 인터페이스 (API) ==
=== 헤더 파일들 ===
C 표준 라이브러리의 [[API]]는 많은 헤더 파일들에 정의되어 있다. 각 헤더 파일은 하나 이상의 함수 정의와 데이터 타입 정의 그리고 매크로들을 포함한다.

{| class="wikitable sortable" style="margin-bottom: 10px;"
!이름
!표준
! 상세
|-
| <code>[[Assert.h|<assert.h>]]</code>
|
|[[표명|assert]] 매크로를 포함하며, 이것은 프로그램의 디버깅 버전들에서 논리 오류들과 버그들의 다른 타입들을 탐지하는 것을 돕는데 사용된다.
|-
| <code>[[Math.h|<complex.h>]]</code>
| C99
|[[복소수]]를 조작하는데 사용되는 함수들의 집합.
|-
| <code>[[Ctype.h|<ctype.h>]]</code>
|
|그들의 타입에 따라 문자들을 분류하거나 대소문자를 전환하는데 사용되는 함수들의 집합을 정의한다.
|-
| <code>[[errno.h|<errno.h>]]</code>
|
|라이브러리 함수들에 의해 리포트되는 오류 코드들을 테스팅할 때 사용된다.
|-
| <code><fenv.h></code>
| C99
|부동소수점 환경을 제어하는데 사용되는 함수들의 집합을 정의한다.
|-
| <code><float.h></code>
|
|부동소수점 라이브러리의 구현된 속성을 명시하는 매크로 상수를 정의한다.
|-
| <code>[[Limits.h|<inttypes.h>]]</code>
| C99
|정확한 정수형을 정의한다.
|-
| <code><iso646.h></code>
| NA1
|여러 표준 토큰들을 표현하기 위한 대체 방식들을 구현하는 여러 매크로들을 정의한다.
|-
| <code><limits.h></code>
|
|정수형 타입의 구현된 속성을 명시하는 매크로 상수를 정의한다.
|-
| <code><locale.h></code>
|
|지역화 함수 정의
|-
| <code><math.h></code>
|
|일반적인 수학 함수 정의
|-
| <code><setjmp.h></code>
|
|<code>setjmp</code> 와 <code>longjmp</code> 매크로를 선언한다.
|-
| <code>[[C 시그널 처리|<signal.h>]]</code>
|
|시그널 핸들링 함수를 정의한다.
|-
| <code><stdalign.h></code>
| C11
|객체들의 얼라인먼트를 질의하고 명시하기 위한.
|-
| <code><stdarg.h></code>
|
|함수에 전달되는 인자들에 접근하기 위한.
|-
| <code><stdatomic.h></code>
| C11
|스레드 사이에서 공유되는 데이터의 원자적 동작을 위한.
|-
| <code>[[stdbool.h|<stdbool.h>]]</code>
| C99
|불린 데이터 형 정의
|-
| <code><stddef.h></code>
|
|여러 유용한 타입과 매크로 정의.
|-
| <code><stdint.h></code>
| C99
|정확한 정수형을 정의.
|-
| '''<code><stdio.h></code>'''
|
|'''핵심 입력과 출력 함수들을 정의한다.'''
|-
| <code><[[stdlib.h]]></code>
|
|숫자 변환 함수들, 슈도 랜덤 숫자 생성 함수들, 메모리 할당, [[C 프로세스 제어|프로세스 제어]] 함수들을 정의한다.
|-
| <code><stdnoreturn.h></code>
| C11
|반환하지 않는 함수들을 명시하기 위한
|-
| <code>[[String.h|<string.h>]]</code>
|
|문자열 처리 함수들을 정의한다.
|-
| <code><tgmath.h></code>
| C99
|포괄형 수학 함수들을 정의한다.
|-
| <code><threads.h></code>
| C11
|다중 스레드들과 뮤텍스 그리고 제어 변수들을 관리하는 함수들을 정의한다.
|-
| <code><[[time.h]]></code>
|
|데이터와 시간 처리 함수들을 정의한다.
|-
| <code><uchar.h></code>
| C11
|유니코드 문자들과 이것을 조작하는 함수들
|-
| <code><wchar.h></code>
| NA1
|wide 문자열 처리 함수들을 정의한다.
|-
| <code><wctype.h></code>
| NA1
|그들의 형에 따라 wide 문자들을 분류하거나 대소문자를 전환하는데 사용되는 함수들의 집합.
|}
세 헤더 파일들의(<code>complex.h</code>, <code>stdatomic.h</code>, <code>threads.h</code>) 구현은 필수는 아니다.

[[POSIX]] 표준은 유닉스를 위한 기능을 위해 여러 표준이 아닌 C 헤더들을 추가하였다. 예를 들면 <code>unistd.h</code> 그리고 <code>signal.h</code>가 있다.

=== 문서화 ===
유닉스 계열 시스템들에서 실제 구현된 API의 권위 있는 문서화는 [[man page]]의 형태로 제공된다.

== 구현 ==
유닉스 계열 시스템들은 일반적으로 공유 라이브러리 형태로 C 라이브러리를 가지지만, 헤더 파일들이 설치 시에 존재하지 않아서 C 개발이 불가능할 수도 있다. C 라이브러리는 유닉스 계열 운영 체제에서 한 부분으로 여겨진다. ISO C 표준을 포함한 C 함수들은 프로그램들에서 널리 사용되지만, 운영 체제 인터페이스의 한 부분이다. 유닉스 계열 시스템들은 일반적으로 C 라이브러리가 제거되면 동작할 수 없다.

마이크로소프트 윈도우에서, 핵심 시스템 [[동적 링크 라이브러리|동적 라이브러리]]들은 C 표준 라이브러리의 구현을 제공한다. C 로 쓰여진 컴파일된 애플리케이션들은 C 라이브러리와 정적으로 링크되거나 딸려온 라이브러리와 동적으로 링크된다. 컴파일러의 C 라이브러리에 존재하는 함수들은 마이크로소프트 윈도우와의 인터페이스로 여겨지지 않는다.

운영 체제와 C 컴파일러에서 제공되는 많은 구현들이 존재한다. 몇몇 유명한 구현들은 다음과 같다.
* [[C 표준 라이브러리|BSD libc]], [[BSD]] 운영 체제 하에 배포되는 구현.
* [[GNU C 라이브러리]] (glibc), [[리눅스]], [[GNU 허드]] 그리고 GNU/kFreeBSD에서 사용된다.
* [[윈도우 라이브러리 파일|마이크로소프트 C 런타임 라이브러리]], [[비주얼 C++]]의 한 부분

=== 컴파일러 빌트인 함수들 ===
몇몇 컴파일러들은(예를 들면 [[GNU 컴파일러 모음|GCC]]<ref>[http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Other-Builtins.html#Other-Builtins Other built-in functions provided by GCC], GCC Manual</ref>) C 표준 라이브러리에서 많은 함수들의 빌트인 버전들을 제공한다; 즉, 함수들의 구현들은 컴파일된 [[목적 파일]]로 쓰여지며 프로그램은 C 라이브러리 공유 목적 파일에 있는 함수들 대신 빌트인 버전들을 호출한다. 이것은 특히 만약 함수 호출들이 [[인라인 함수|인라인]] 형태로 대체된다면 함수 호출 오버헤드를 감소시키며, [[컴파일러 최적화|최적화]]의 다른 형태(컴파일러가 빌트인 형태의 [[제어 흐름]] 특징을 알 때)를 허용하지만 디버깅 시에 혼란을 야기할 수 있다. (예를 들면 빌트인 버전들은 인스트루멘트된 형태로 대체될 수 없다)

그러나 빌트인 함수들은 반드시 ISO C에 따라 기본 함수들처럼 행동해야 한다. 중요한 것은 프로그램이 반드시 이러한 함수들을 가리키는 포인터를 주소를 사용해서 생성할 수 있어야 하고, 이 포인터로 함수를 발생시킬 수 있어야 한다. 만약 같은 함수에 대한 두 포인터들이 프로그램에서 두 다른 변환 유닛으로 만들어진다면, 이러한 두 포인터들은 반드시 같아야 한다. 즉, 외부 링크를 갖는 함수의 이름을 리졸브해서 얻은 주소이다.

=== 링킹, libm ===
리눅스 그리고 FreeBSD에서,<ref>{{웹 인용
 |title=Compiling with cc
 |url=http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/tools-compiling.html
 |accessdate=2016-02-11}}</ref> 수학 함수들( <code>math.h</code>에 정의된)은 수학 라이브러리 [[Math.h|libm]]에서 따로 묶어져야 한다. 만약 이것들 중 어느 것이 사용된다면, 링커는 반드시 지시자 <code>-lm</code>을 받아야 한다.

=== 탐지 ===
C 표준에 따르면, 만약 구현이 호스트된다면 매크로 <code>__STDC_HOSTED__</code> 는  '''1''' 로 정의될 것이다. 호스트된 구현은 C 표준에 명시된 모든 헤더들을 갖는다. 구현은 또한 ''freestanding'' 일 수 있는데 이것은 이러한 헤더들이 존재하지 않는다는 의미이다. 만약 구현이 ''freestanding''이라면, 이것은 <code>__STDC_HOSTED__</code> 을 '''0'''으로 정의할 것이다.

== 개념, 문제 그리고 해결책 ==
=== 버퍼 오버플로우 취약점 ===
C 표준 라이브러리에 있는 몇몇 함수들은 버퍼 오버플로우 취약점들과 채택 이후의 버그를 유발하는 프로그래밍을 조장하는 것으로 악명 높다.<ref>Morris worm that takes advantage of the well-known vulnerability in <code>gets()</code> have been created as early as in 1988.</ref> 가장 비판받는 항목은:
* 문자열 조작 루틴들 :  <code>strcpy()</code> 와 <code>strcat()</code>를 포함하며 경계 검사의 부족과 경계가 직접 검사되지 않았을 때의 버퍼 오버플로우 가능성이 있다;
* 일반적인 문자열 루틴들 : [[부작용 (컴퓨터 과학)|부작용]]으로 인해서 무책임한 버퍼 사용을 부추기며, 항상 유효한 널 종료 출력과 선형 길이 계산을 보장하지는 않는다;<ref>in C standard library, string length calculation and looking for a string's end have Linear time and are inefficient when used on the same or related strings repeatedly</ref>
* <code>[[printf]]()</code> 관련 루틴들 : 포맷 스트링이 주어진 인자와 맞지 않았을 때 [[콜 스택|실행 스택]]을 망친다. 이러한 근본적인 결함은 많은 공격들을 만들어 낸다: [[포맷 스트링 버그]];
* <code>gets()</code> 와 <code>[[scanf]]()</code> 같은 입출력 루틴들 : 입력 길이 검사가 부족하다.
<code>gets()</code>를 사용한 극단적인 경우를 제외하고, 모든 보안 취약점들은 보조 코드가 메모리 관리, 경계 검사, 입력 검사 등을 수행하게 함으로써 피할 수 있다. 이것은 종종 표준 라이브러리 함수들을 사용하기 쉽고 안전하게 만들어 주는 래퍼의 형태를 통해 가능해 진다.

함수들에 경계 검사와 자동 버퍼 할당을 채택하는 것을 제안하기 위해 ISO C 윈원회는 기술 보고서 TR 24731-1<ref>{{웹 인용
 | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1225.pdf
 | title = ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces
 | date = 2007-03-28
 | accessdate = 2016-02-11
 | publisher = open-std.org | format = PDF
}}</ref>를 발행하였고 TR 24731-2<ref>{{웹 인용
 | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1337.pdf
 | title = ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions
 | date = 2008-08-10
 | accessdate = 2016-02-11
 | publisher = open-std.org
 | format = PDF
}}</ref>를 작성중에 있다. 전자는 많은 비판을 받았지만,<ref>[http://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions-in-your-c-code Do you use the TR 24731 'safe' functions in your C code?] - Stack overflow</ref><ref>{{웹 인용
 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt
 |title=Austin Group Review of ISO/IEC WDTR 24731
 |date= 
 |accessdate=2016-02-11}}</ref> 후자는 비판과 칭찬을 모두 받았다. 그럼에도 불구하고 TR 24731-1는 마이크로소프트의 C 표준 라이브러리에 구현되었으며, 이것의 컴파일러는 오래된 불안정한 함수들을 사용할 때 경고를 발생시킨다.

=== 쓰레딩 문제, 경쟁 상태에 대한 취약점 ===
<code>mktemp()</code> 과 <code>[[String.h|strerror]]()</code> 루틴들은 [[스레드 안전]]와 [[경쟁 상태]]에 대한 취약점 때문에 비판을 받았다.

=== 오류 처리 ===
C 표준 라이브러리에서 함수들의 오류 처리는 일관되지 않으며 가끔은 혼란스럽다. 이것은 리눅스 매뉴얼 페이지 <code>math_error</code> 에 잘 요약되어 있다:<ref>{{웹 인용
 | url = http://man7.org/linux/man-pages/man7/math_error.7.html
 | title = math_error - detecting errors from mathematical functions
 | date = 2008-08-11
 | accessdate = 2016-02-11
 | publisher = man7.org
}}</ref>
  ''glibc 하의 현재(버전 2.8) 상황은 엉망이다. 대부분의(모두는 아니지만) 함수들은 오류들에 대해 예외를 일으킨다. 몇몇은 또한 errno를 설정한다. 소수의 함수들은 errno를 설정하지만, 예외를 일으키지는 않는다. 극히 소수의 함수들은 둘 모두 하지 않는다.''

== 표준화 ==
다른 언어들과 달리, 원본 C 언어는 입출력 동작 같은 빌트인 함수들을 제공하지 않았다. 시간이 지나면서 C의 사용자 커뮤니티들은 생각을 공유하고 현재 C 표준 라이브러리라고 불리는 것을 구현하였다. 이러한 아이디어들 중 많은 수가 결국 표준 C 언어의 정의에 포함되었다.

유닉스와 C는 모두 [[벨 연구소]]에서 1960년대에에서 1970년대에 만들어졌다. 1970년대 동안 C 언어는 점점 유명해 졌다. 많은 대학교들과 단체들이 자신의 프로젝트를 위해 이 언어를 자신만의 형태로 만들었다. 1980년대의 시작에 이것들 간에 호환 문제가 발생하였다. 1983년 [[미국 국립 표준 협회]](ANSI)는 위원회를 구성해서 C의 표준 명세를 확립하였고 이것은 ANSI C로 불린다. 이 작업은 1989년 C89라고 불리는 것이 만들어짐으로써 끝이나게 된다.

=== POSIX 표준 라이브러리 ===
[[POSIX]], 또는 [[단일 유닉스 규격|SUS]]는 기본 C 표준 라이브러리에서 사용 가능한 많은 수의 루틴들을 명시하였다. POSIX 명세는 멀티 스레드, 네트워킹 그리고 정규 표현식에 대한 헤더 파일들을 포함한다. 이러한 것들은 종종 C 표준 라이브러리 기능들과 동시에 구현되었다. 예를 들면 [[GNU C 라이브러리|glibc]]는 <code>libc.so</code> 내의 fork 같은 함수들을 구현하였다. 종종 POSIX 명세의 기능은 라이브러리의 한 부분으로 여겨질 수 있다; 기본 C 라이브러리는 ANSI 또는 ISO C 라이브러리로 식별된다.

=== BSD libc ===
'''BSD libc'''는 POSIX 표준 라이브러리의 상위 집합으로서 [[FreeBSD]], [[NetBSD]], [[OpenBSD]] 그리고 [[OS X|OS X]] 같은 BSD 운영 체제에서 사용된다. 이것은 1994년 릴리즈된 [[BSD|4.4BSD]]에서 처음 선보여졌다. BSD libc는 원본 표준에서 정의되지 않은 몇몇 확장들을 갖는다. BSD libc의 확장들 중 몇몇은 다음과 같다:
* [http://bxr.su/o/sys/sys/tree.h <code>sys/tree.h</code>]<span> </span>&#x2013;.<ref>{{웹 인용|url=http://man.freebsd.org/tree|title=tree |publisher=Man.freebsd.org |date=2007-12-27 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/sys/sys/queue.h <code>sys/queue.h</code>]<span> </span>&#x2013;.<ref>{{웹 인용|url=http://man.freebsd.org/queue |title=queue |publisher=Man.freebsd.org |date=2011-05-13 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/lib/libc/stdio/fgetln.c#fgetln <code>fgetln()</code>]<span> </span>&#x2013; [http://bxr.su/o/include/stdio.h <code>stdio.h</code>]에 정의되었다. 이것은 파일을 라인 단위로 읽을 때 사용된다.<ref>{{웹 인용|url=http://man.freebsd.org/fgetln |title=fgetln |publisher=Man.freebsd.org |date=1994-04-19 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/include/fts.h <code>fts.h</code>]<span> </span>&#x2013;&nbsp;&#xD30C;&#xC77C;&#x20;&#xACC4;&#xCE35;&#xC744;&#x20;&#xC21C;&#xD68C;&#xD558;&#xAE30;&#x20;&#xC704;&#xD55C;&#x20;&#xD568;&#xC218;&#xB4E4;&#xC744;&#x20;&#xD3EC;&#xD568;&#xD55C;&#xB2E4;.<ref>{{웹 인용|url=http://man.freebsd.org/fts |title=fts|publisher=Man.freebsd.org |date=2012-03-18 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/include/db.h <code>db.h</code>]<span> </span>&#x2013;&nbsp;버클리&#x20;&#x44;&#x42;&#xC5D0;&#x20;&#xC5F0;&#xACB0;&#xD558;&#xAE30;&#x20;&#xC704;&#xD55C;&#x20;&#xD568;&#xC218;&#xB4E4;.<ref>{{웹 인용|url=http://man.freebsd.org/db |title=db|publisher=Man.freebsd.org |date=2010-09-10 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/lib/libc/string/strlcat.c <code>strlcat()</code>] 와 [http://bxr.su/o/lib/libc/string/strlcpy.c <code>strlcpy()</code>]<span> </span>&#x2013; [http://bxr.su/o/lib/libc/string/strncat.c <code>strncat()</code>] 와 [http://bxr.su/o/lib/libc/string/strncpy.c <code>strncpy()</code>]의 안전한 대체<ref>Miller, Todd C. and Theo de Raadt. [http://www.usenix.org/events/usenix99/millert.html strlcpy and strlcat - consistent, safe, string copy and concatenation]. Proceedings of the 1999 USENIX Annual Technical Conference, June 6–11, 1999, pp. 175–178.</ref>
* [http://bxr.su/o/include/err.h <code>err.h</code>]<span> </span>&#x2013;&nbsp;&#xC815;&#xD615;&#xD654;&#xB41C;&#x20;&#xC624;&#xB958;&#x20;&#xBA54;&#xC2DC;&#xC9C0;&#xB4E4;&#xC744;&#x20;&#xCD9C;&#xB825;&#xD558;&#xB294;&#x20;&#xD568;&#xC218;&#xB4E4;&#xC744;&#x20;&#xD3EC;&#xD568;&#xD55C;&#xB2E4;.<ref>{{웹 인용|url=http://man.freebsd.org/err |title=err|publisher=Man.freebsd.org |date=2012-03-29 |accessdate=2016-02-11}}</ref>
* [http://bxr.su/o/include/vis.h <code>vis.h</code>]<span> </span>&#x2013; [http://bxr.su/o/lib/libc/gen/vis.c#vis <code>vis()</code>] 함수를 포함한다. 이 함수는 비주얼 포맷에서 출력할 수 없는 문자들을 표시하는데 사용된다.<ref>{{웹 인용|title=vis(3)|url=http://www.freebsd.org/cgi/man.cgi?query=vis&sektion=3&apropos=0&manpath=FreeBSD+9.1-RELEASE|publisher=Man.FreeBSD.org|accessdate=2016-02-11}}</ref>

== 다른 언어들에서의 C 표준 라이브러리 ==
몇몇 언어들은 자신의 라이브러리에 표준 C 라이브러리의 기능을 포함한다. 라이브러리는 그 언어의 구조에 어울리게 해서 채택되지만, 동작 의미는 비슷하게 된다. 예를 들면 [[C++]] 언어는 이름공간 <code>std</code> (예를 들면 <code>std::printf</code>, <code>std::atoi</code>, <code>std::feof</code>)에서 C 표준 라이브러리의 기능을 포함하는데, 헤더 파일도 C의 것과 비슷하다(<code>cstdio</code>, <code>cmath</code>, <code>cstdlib</code>, 등). 다른 언어들은 [[D (프로그래밍 언어)|D]]와 비슷한 접근법을 갖는데 [[파이썬]]의 경우 [[C파이썬]]이 있다. 예를 들면 파이썬 2에서 빌트인 파일 객체들은 "C의 <code>stdio</code> 패키지를 사용해서 구현되었다"<ref>{{웹 인용|url=https://docs.python.org/library/stdtypes.html#bltin-file-objects |title=The Python Standard Library: 6.9. File Objects |publisher=Docs.python.org |date= |accessdate=2016-02-11}}</ref>고 정의되어서, 사용 가능한 연산들(open, read, write 등)은 상응하는 C 함수들과 같은 동작을 한다고 기대할 수 있다.

== 다른 언어들의 표준 라이브러리들과의 비교 ==
C 표준 라이브러리는 다른 언어들의 표준 라이브러리들과 비교했을 때 작다고 할 수 있다. C 라이브러리는 수학, 문자열 조작, 형 변환 그리고 파일과 콘솔 기반 입출력 함수들의 기본 집합을 제공한다. 이것은 [[C++]] [[표준 템플릿 라이브러리]]처럼 컨테이너 타입의 표준 집합을 포함하지 않는다. 이러한 작은 표준 라이브러리의 장점은 일할 ISO C 환경을 다른 언어들 보다 더 쉽게 제공한다는 것이며, 결과적으로 C를 새로운 플랫폼에 포팅하는 것이 상대적으로 쉽게 된다.

== 같이 보기 ==
* [[C++ 표준 라이브러리]]

== 각주 ==
{{각주|30em}}

== 더 읽어보기 ==
* Plauger, P. J. (1992). ''The Standard C library''. Englewood Cliffs, N.J: Prentice Hall. [[국제 표준 도서 번호|ISBN]]&nbsp;0-13-131509-9.

== 외부 링크 ==
* [https://web.archive.org/web/20150118141700/http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html The C Library Reference Guide]
* [http://www.schweikhardt.net/identifiers.html Handy list of which headers are in which standard]
* Microsoft [http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx C Run-Time Libraries] on MSDN
* NetBSD [http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current C libraries manual] {{웨이백|url=http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current |date=20151223092755 }} and [http://BXR.SU/NetBSD/lib/libc/ full C library source]
* [http://man.cat-v.org/unix-1st/3/ Manual pages for the original C standard libraries in Unix]

{{C 프로그래밍 언어}}

[[분류:C 프로그래밍 언어]]
[[분류:C 표준 라이브러리| ]]