C é básico por design. Ele cuida do essencial e deixa o resto com você. Não há entradas de teclado ou saídas de tela integradas. Se quiser exibir texto, você precisa de ferramentas externas. É aí que entram as bibliotecas de programação C. Elas são pedaços de código reutilizáveis ​​que ampliam os recursos básicos da linguagem.

Pense neles como plug-ins para sua lógica. A biblioteca stdio padrão lida com entrada e saída. Outros gerenciam matemática, strings ou tempo. Usá-los divide seu projeto em módulos gerenciáveis. Isso torna a depuração mais fácil. Ele também permite que você pegue código funcional de projetos antigos e coloque-o em novos.

Por que o código modular é importante

Escrever tudo em um arquivo fica confuso rapidamente. Você acaba com centenas de linhas que são difíceis de seguir. As bibliotecas resolvem isso isolando a funcionalidade. Você testa uma única função. Você verifica se funciona. Então você segue em frente.

O resultado é um código mais limpo. Também é mais seguro. Se aparecer um bug, você sabe exatamente qual módulo verificar. Você não está caçando por meio de um script monolítico.

Exemplo: Refatorando classificação aleatória

Vejamos um exemplo prático. Imagine um programa que gera números aleatórios, os classifica e os imprime. O código inicial pode parecer uma bagunça emaranhada.

Isso preenche uma matriz com valores aleatórios. Em seguida, aplica uma classificação de bolha. Finalmente, imprime a lista ordenada. Funciona. Mas não é reutilizável. A lógica de classificação é codificada. O tamanho da matriz é fixo. Você não pode trocar facilmente o algoritmo de classificação ou a fonte de dados.

Etapa 1: Extraia a função de classificação

O primeiro passo para uma biblioteca é a extração. Pegue o loop de classificação de bolhas e transforme-o em uma função. Como o array a e a constante MAX são globais neste trecho, a função não precisa de parâmetros para eles. Também não precisa retornar um valor.

Observe os parâmetros. A função agora leva m, o número de elementos. Isso o torna flexível. Você pode classificar uma matriz de 10 itens. Ou um array de 100. Basta passar o tamanho.

A função principal fica mais simples. Ele preenche a matriz. Ele chama o tipo. Ele imprime o resultado.

Isto é melhor. Mas ainda está vinculado ao array global a. E se você quiser classificar um array diferente? Ou passar dados de outro módulo?

Etapa 2: Generalizar para uma verdadeira reutilização

Para tornar isso realmente pronto para a biblioteca, passe o próprio array como parâmetro. Altere a assinatura da função.

Isso diz ao compilador para aceitar um array inteiro de qualquer tamanho. O corpo da função não muda. Você está apenas passando os dados para a lógica, em vez de confiar no estado global.

A chamada em main é ligeiramente atualizada. Você passa o nome do array a e seu tamanho MAX.

Não use &a. Você pode pensar que precisa de um ponteiro para todo o array. Você não. Em C, os nomes dos arrays se transformam em ponteiros para seu primeiro elemento quando passados ​​para funções. Compreender esta distinção requer indicadores. Mas, por enquanto, saiba apenas que a é suficiente.

Por que esta estrutura vence

Você