terça-feira, 28 de fevereiro de 2012

Para que servem as bibliotecas <stdio.h> e <stdlib.h>

Olá pessoal, hoje vamos entender para que servem as bibliotecas que importamos para o programa C.

Com certeza a primeira coisa que você se perguntou quando viu um código C na sua frente, foi para que servem #include<stdio.h> e #include<stdlib.h>? o que elas fazem?
 
Elas são bibliotecas que agrupam um conjunto de funções que facilitam a nossa vida na hora de programar, isso mesmo as funções printf e scanf não são propriamente do C, elas fazem parte de uma biblioteca que está inclusa no C, então podemos dizer que as funções printf e scanf são de uma biblioteca que pode ser inclusa no C. Utilizando a palavra chave #include <nome da biblioteca>.

A biblioteca que contém o printf e scanf é a <stdio.h>, se repararmos o nome dessa biblioteca, veremos que seu nome é bem sugestivo ao seu propósito: stdio.h (i/o input/output) entrada e saída. Já que printf faz a saída do programa, ou seja, exibe algo para o usuário, e o scanf faz a leitura dos dados, ou seja, recebe a entrada do teclado.

Então se a biblioteca <stdio.h> não for incluida no cabeçario do nosso programa não tem como usarmos as funções que estão contidas dentro dela. Faça um teste, experimente apagar a linha: #include<stdio.h>,  e compile seu programa. Veja o que acontece.

Beleza, a biblioteca <stdio.h>, cuida da parte de entrada e saida de dados, mas e a <stdlib.h> para que ela seve? A biblioteca <stdlib.h> funciona como um emulador da prompt do sistema operacional que você está programando, caso seja Windows ele emula todos os comandos do DOS, se você estiver programando no Linux, quem será emulado é o Terminal. 

Essa biblioteca é muito inteiressante, pois com apenas algumas linhas de comando você consegue acessar pastas, mover diretorios, executar programas, fuder com a HD e tudo o que um programador metido a hacker gosta de fazer =D.

Aqui um exemplo de como é legal brincar com a biblioteca <stdlib.h>:

#include <stdlib.h>

int main() {
    system("calc");
    system("pause");
    return 0;
}


O que aconteceu ... legal né? Isso é só o começo de um montão de coisa que você pode fazer utilizando o system.


Ainda resta uma dúvida. Só existem essas bibliotecas em C ? É claro que não pessoal, existem muitas outras bibliotecas que são especificas para cada situação. Existem bibliotecas para trabalhar com contas matemáticas, bibliotecas para manipular textos, para manipular a formatação de exibição dos dados e uma infinidade de outras coisas ai. A melhor coisa a ser feita é uma pesquisa rápida pelo Google.

Bele pessoal?, dúvidas, sugestões não esqueçam deixem seus comentários. Valeu e até a próxima.

38 comentários:

  1. Valeu Guilherme,,,
    Ainda que deu uma abertura sobre as bibliotecas e , posso saber porque usar a biblioteca tbm?

    ResponderExcluir
    Respostas
    1. Olá Johnny,
      Devemos usar as bibliotecas em C para poder utilizar as funções que estão contidas nela. Por exemplo, se você não utilizar a stdio você não poderá utilizar a função printf para exibir textos no ecrã do sistema operacional que você está programando. Então as bibliotecas servem para minimizar o seu esforço como programador ... Já pensou em ter que programar tudo do zero? Seria algo terrível.
      Espero que tenha entendido, qualquer coisa não deixe de perguntar abraços!
      PS = assine nosso feed para receber as atualizações diretamente por e-mail.

      Excluir
  2. stdio.h e stdlib.h não são bibliotecas, mas arquivos contendo cabeçalhos (em Inglês, header, donde vem também a extensão ".h").

    Em C e C++, os arquivos de cabeçalho são adicionados ao programa por meio do comando #include do preprocessador (o verbo "adicionar", aliás, não foi usado por acaso: o efeito do comando é trazer todo o conteúdo do arquivo referenciado para que seja compilado como se fizesse parte do programa que o está incluindo). Existem duas sintaxes para o #include: a primeira delas coloca o nome do arquivo incluído entre os sinais menor que ("<") e maior que (">"), significando que o compilador deve buscar o arquivo entre os cabeçalhos predefinidos pelo ambiente de compilação (i.e. aqueles que acompanham o compilador), e a segunda coloca o nome do arquivo entre aspas, para que o compilador o localize a partir do mesmo caminho em que reside o programa que está sendo compilado.

    O uso típico de arquivos de cabeçalho em C (C++ muda isso um pouco, conforme se verá mais abaixo) é fazer declarações de símbolos (i.e. nomes de funções, variáveis globais com ligação externa e tipos de dados) ou definir valores constantes e macros, de modo que o compilador saiba o que aquele símbolo significa, dando-lhe meios de usá-los corretamente ou de diagnosticar uso inapropriado, mas sem gerar código objeto durante a compilação do arquivo de cabeçalhos.

    O código objeto que implementa aquilo que é apresentado nos cabeçalhos não reside nesses arquivos, mas em outros. A função printf(), por exemplo, tem dentro de <stdio.h> apenas uma presentação, mas sua implementação reside noutro lugar, e pode nem mesmo ter sido escrita originalmente como um programa em C (esse "outro lugar" tipicamente é um arquivo com extensão ".so" ou ".a" no mundo UNIX, ou ".LIB" ou ".DLL" no Windows).

    A correspondência entre os arquivos de cabeçalhos e as bibliotecas que eles apresentam não é necessariamente biunívoca. Ao contrário, até: a maioria das implementações da biblioteca padrão da linguagem C é contida num arquivo só (no mundo UNIX, a famosa "libc"; no mundo Windows, MSCRT*.DLL), embora as funções e tipos de dados relacionados a entrada e saída sejam apresentadas em <stdio.h>, aquelas relativas a manipulação de strings, em <string.h>, as de data e hora, em <time.h>, e funções de utilidade em geral, em <stdlib.h>.

    (No caso do C++, é comum que código incluído por meio de #include gere código executável novo, principalmente por causa de uso de programação genérica com templates. Por conta dessa geração de código, muitas pessoas consideram errôneo dizer que tais arquivos são apenas de cabeçalhos. Em parte em função disso -- e em parte também para evitar confusão com arquivos de cabeçalhos com nomes parecidos que fazem parte de compiladores C --, desde o padrão C++ de 1998, os "cabeçalhos" de C++ não têm mais a extensão ".h".)

    ResponderExcluir
    Respostas
    1. Paulo dá para ver que você manja muito cara parabéns. Porém não é errado chamar um header de biblioteca :D blz!

      E com certeza podemos montar nossas bibliotecas ou headers (como preferir nomear) e adicioná-los ao nosso programa C, porém, o escopo da postagem não cobria isso :p. Esse post foi feito para quem está começando.

      Outra coisa, você escreve bem mas cuidado para não afirmar coisas que não tem como você provar como: "muitas pessoas consideram errôneo". Quem são muitas pessoas? Porque devo considerar a opinião delas?

      Mas achei legal seu comentário e obrigado por ajudar a melhor o conteúdo do blog.

      Excluir
  3. Cara, por que tu escreveu return 0; no final daquele código? Digo, se você tirar essa parte, o código dá no mesmo...

    ResponderExcluir
    Respostas
    1. O return no final do código serve para indicar que o sistema terminou sem nenhum erro. Sempre retorne o valor no final do seu main ... é uma boa prática de programação.

      Excluir
  4. Olá amigo, não terminei de ler o artigo pois, há um erro gritante que me impediu de prosseguir. Mais exatamente em sua primeira palavra. Favor verificar a gramática antes de postar algum artigo.
    Talvez, se o texto fosse escrito no DEV C++, o erro teria sido sinalizado.
    De nada.

    ResponderExcluir
    Respostas
    1. kkkkkkkkkkkkkk Também vi!!! hahahaha Muito burro! Dá zero pra ele!

      Excluir
    2. caralho que burro dá 0 pra ele, qm é teu professor?

      http://2.bp.blogspot.com/-gEuRAi_3WEs/T9fXaftwj3I/AAAAAAAADwY/CuO5CrQL6DE/s640/SeuCreysson.png

      Excluir
  5. Olá amigo, não terminei de ler o artigo pois, há um erro gritante que me impediu de prosseguir. Mais exatamente em sua primeira palavra. Favor verificar a gramática antes de postar algum artigo.
    Talvez, se o texto fosse escrito no DEV C++, o erro teria sido sinalizado.
    De nada.

    ResponderExcluir
    Respostas
    1. Qual foi o erro amigo? E quem disse que isso é um artigo, isso é uma postagem de um blog que escrevo em minhas horas livres. Meu professor acho que você não conhece, mas se chama Breno =). Obrigado pelas criticas, se tiver mais alguma manda ai.

      Segue o blog assim você pode ficar por dentro de tudo o que eu postar. Até mais amigo.

      Excluir
    2. Tem gente que ao invés de somar, quer fazer palhaçada... Erro bobo, falta de atenção, nada justifica tamanha grosseria e deboche.
      Parabéns Guilherme! Continue fazendo o que esse (ou essa) aí não faz: ser útil.

      Excluir
  6. Esse trecho de codigo no ex. da biblioteca #include stdlib.h, resulta em que? nao tive coragem de rodar!! hehehe...

    ResponderExcluir
    Respostas
    1. Se vc estiver usando sistema operacional Windows, a calculadora será aberta.

      Excluir
    2. infelizmente copiei e colei e o sistema perguntou se quero incluir pois já existe nele. achei que não iria abrir a calc. resondi não. rss

      Excluir
    3. Poxa, rodei no meu e não fez nada... só aparece uma msg e pronto.

      Excluir
  7. Parabéns, ficou bem claro...

    ResponderExcluir
  8. Respostas
    1. Vlw Paulo, nas minhas férias espero retomar as postagens.

      Excluir
  9. tenho esse codigo na biblioteca stdio.h

    #include
    int main(void) {
    int i, j, n;
    printf("Digite um valor de 1 a 9: ");
    scanf("%d", &n);
    if (n < 1 || n > 9)
    printf("Valor de invalido !\n");
    else {
    for (i = 1; i <= n; i++) {
    for (j = 1; j <= i; j++)
    printf("%d", j);
    printf("\n");
    }
    }
    }

    porem eu não entendo esses parametros usados ao lado do %, todos que eu estudei anteriormente estavão situados na biblioteca iostream e cstdlib.
    poderia me ajudar?

    ResponderExcluir
    Respostas
    1. %d ou %i = Inteiros (int)
      %f = Ponto flutuante (float)
      %c = Caracter (char)
      %s = Cadeia de caracteres (char)

      Esses são os mais comuns. Esses parâmetros são usados para identificar qual o tipo que está sendo lido e vai ser atribuído a variável.

      Excluir
  10. Muito legal, me ajudou bastante. Parabéns.

    ResponderExcluir
  11. mas como que eu faço para resolver o maior entre três números(a+b+abs(a-b))/2 ????

    ResponderExcluir
  12. Gostei da postagem, vlw!

    Só corrigindo um erro seu:
    "inteiressante"

    correto: "Interessante"

    ResponderExcluir
  13. #include
    #include

    int main ()
    {
    printf ("vlw!!!");
    system ("pause");
    return 0;
    }

    ResponderExcluir
  14. boa tarde
    tô começando
    espero ter ajuda neste início
    quando tiver algo pra somar ajudarei
    vlw Guilherme pela inciativa

    ResponderExcluir
  15. Guilherme vc está de parabéns, continue mostrando uma luz para quem está começando, igual a mim.
    Não ligue para palhaços que só esperam a gente dá um deslize qualquer para tacar pedras

    ResponderExcluir
  16. Alguém sabe me informar como faz para apagar uma cadeia de caracteres só usando string, char, int, float. Ou seja não posso usar variaveis diferentes.

    ResponderExcluir
  17. Parabéns!!! Voce acabou de me tirar uma duvida, que parece ser boba mas não é :D
    Simples e objetivo

    ResponderExcluir
  18. #include
    int main(){
    printf("digite um num:");
    scanf("%D", &a
    continueeeem

    ResponderExcluir
  19. Este comentário foi removido pelo autor.

    ResponderExcluir
  20. Este comentário foi removido pelo autor.

    ResponderExcluir
  21. Usei os comandos do prompt de comando sem o stdlib.h e funcionou do mesmo jeito. Alguém explica?

    ResponderExcluir

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...