O nome e as características de cada função estão em um arquivo chamado cabeçalho, mas a implementação das funções está em um arquivo separado. A nomenclatura e o escopo dos cabeçalhos é comum a diferentes implementações, mas a organização das bibliotecas diverge. Cada compilador C possui sua implementação da biblioteca padrão C. Como os compiladores C geralmente oferecem funcionalidades adicionais que não são especificadas pelo ANSI C, a implementação da biblioteca padrão de um compilador é muito provavelmente incompatível com a de outro.
Qualidade
A maior parte da biblioteca padrão se mostrou ter sido bem desenvolvida. Entretanto, algumas partes são atualmente consideradas erros de modelagem. Por exemplo, as funções de entrada de texto gets() e scanf() (esta, para ler entrada de texto) são consideradas a fonte de diversos problemas de buffer overflow, e seu uso é desaconselhado. Outra fraqueza é strtok(), uma função que visa servir como um analisador léxico primitivo, mas que é "frágil" e difícil de usar.
História
Antes de ser padronizada, a linguagem C não fornecia funcionalidades nativas como operações de entrada e saída, diferente de outras linguagens tradicionais como Cobol e Fortran. Com o tempo, a comunidade de usuários compartilhou idéias e implementações do que é atualmente chamado biblioteca padrão.
Tanto o Unix quanto a linguagem C foram criados no Bell Labs entre o final da década de 1960 e o início da década de 1970. Durante a década de 1970 a linguagem C tornou-se cada vez mais popular, e diferentes universidades e organizações estavam criando suas próprias variações da linguagem para seus projetos. A partir da década de 1980, os problemas de compatibilidade por conta dessas diferentes versões se tornou cada vez mais aparente. Em 1983 a ANSI formou um comitê para estabelecer uma especificação formal da linguagem conhecida como ANSI C. Esse trabalho culminou na criação padrão C89 em 1989. Parte do padrão que havia surgido era um conjunto de bibliotecas chamado biblioteca padrão do ANSI C.
Revisões posteriores do padrão da linguagem C adicionaram diversos novos cabeçalhos e funcionalidades à biblioteca padrão. Entretanto, o suporte para essas novas extensões variam entre implementações.
Os cabeçalhos <iso646.h>, <wchar.h> e <wctype.h> foram adicionados com o Normative Addendum 1 (NA1), uma ratificação de 1995. Já os cabeçalhos <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> e <tgmath.h> foram adicionados com o C99, uma revisão do padrão publicada em 1999.
Padrão ANSI
A biblioteca padrão ANSI C consiste de 24 cabeçalhos, cada um contendo uma ou mais declarações de funções, tipos de dados e macros. Em comparação com linguagens como Java, esta biblioteca padrão é minúscula. Ela fornece um conjunto básico de operações matemáticas, manipulação de cadeias de caracteres, conversão de tipos de dados e entrada e saída de arquivo e da tela. Não contém um conjunto padrão de containers como a biblioteca padrão do C++ (parte chamada Standard Template Library), nem suporta interface gráfica do utilizador. A vantagem desse sistema minimalista é que fornecer um ambiente funcional de ANSI C é muito mais simples que em outras linguagens, e, conseqüentemente, a portabilidade de C entre diferentes plataformas é uma tarefa relativamente simples.
Várias outras bibliotecas foram desenvolvidas para suprir as necessidades computacionais que a biblioteca padrão não cobre. Por exemplo, o projeto GNOME desenvolveu o toolkitGTK+ e a GLib, uma biblioteca de containers.
Cabeçalhos do ANSI C
Descrição
Disponibilidade a partir de
<assert.h>
Macro para ajudar na detecção de erros lógicos e outros tipos de erros em versões de depuração de um programa.
Constantes de propriedades específicas de implementação da biblioteca de ponto flutuante, como a menor diferença entre dois números de ponto flutuante distintos (_EPSILON), a quantidade máxima de dígitos de acurácia (_DIG) e a faixa de números que pode ser representada (_MIN, _MAX).
Constantes de propriedades específicas de implementação da biblioteca de tipos inteiros, como a faixa de números que pode ser representada (_MIN, _MAX).
<locale.h>
Constantes para setlocale() e assuntos relacionados.
Manipulação de caractere wide, usado para suportar diversas línguas.
NA1
<wctype.h>
Classificação de caracteres wide.
NA1
Biblioteca padrão do C em outras linguagens
Algumas linguagens incluem a funcionalidade da biblioteca padrão do C em suas próprias bibliotecas. A biblioteca pode ser adaptada para se adequar melhor à estrutura da linguagem destino, mas a semântica permanece a mesma. Por exemplo, C++ inclui a funcionalidade da biblioteca padrão ANSI C no espaço de nomesstd (como std::printf, std::atoi, std::feof, etc.), em cabeçalhos parecidos com os do C, exceto pela retirada do sufixo ".h" e pela adição do prefixo "c" ("cstdio", "cmath", "cstdlib", etc.). Outras linguagens que também adotam abordagens similares incluem D, Python e Go. Um caso curioso das linguagens Rust e Zig, é a possibilidade de automaticamente traduzir o código C para essas linguagens utilizando algumas ferramentas próprias como bindgen-rs vinculado ao gerenciador de projeto cargo e o zig translate-c ao fazer uso da palavra-chave @cImport(@cInclude("stdio.h")) durante a compilação ou simplesmente passar os parametros em ambas ferramentas, contendo também o arquivo .c.