Programação Imperativa

Aula 21

Sumário

Programas em mais do que um ficheiro.


Programas em mais do que um ficheiro

Quando se faz programas com uma certa dimensão, nunca se faz o código todo no mesmo ficheiro. Normalmente o programa é feito em vários ficheiros. Cada ficheiro é constituído por uma série de funções que tem um determinado fim. É precisamente isso que acontece com as bibliotecas do C. Por exemplo, o stdio.h tem uma série de funções para fazer input/output. O math.h tem uma série de funções matemáticas, etc.

Vocês também podem criar os vossos ficheiros qq_coisa.h (o h é de header). Estes ficheiros apenas têm definições. O código propriamente dito costuma ficar no ficheiro qq_coisa.c.

Exemplo: Vamos fazer um ficheiro chamado array.c que contém uma série de funções que são úteis para manipular arrays de inteiros. O conteúdo de array.c poderia ser o seguinte,

    /*
     *  Este ficheiro tem a implementação de uma série de
     *  funções para manipular arrays de inteiros
     */
    
    #include <stdio.h>
    #include "array.h"
    
    /* calcula o máximo elemento de um array de 'n' inteiros*/
    int max_array( int *a, int n )
    {
      int i, max;
    
      max = a[0];
      for( i=1; i<n; i++ )
        if( a[i] > max )
          max = a[i];
    
      return max;
    }
    
    /* escreve um array de 'n' inteiros no ecrã */
    void escreve_array( int *a, int n )
    {
      int i;
    
      for( i=0; i<n; i++ )
        printf("%d ", a[i] );
      printf("\n");
    }

Reparem que o ficheiro array.c não tem a função main. Agora, podíamos fazer um ficheiro chamado array.h que contem apenas as definições das funções,

    /*
     *  Este ficheiro tem a definição de uma série de
     *  funções para manipular arrays de inteiros
     */
    
    /* calcula o máximo elemento de um array de 'n' inteiros */
    int max_array( int *a, int n );
    
    /* escreve um array de 'n' inteiros no ecrã */
    void escreve_array( int *a, int n );

Os 2 ficheiros, array.h e array.c constituem uma espécie de biblioteca para manipular arrays. Uma vez feito isto, podem fazer um programa e utilizar as funções feitas em array.c. Para tal, basta fazer o include de "array.h". Reparem que o include dos ficheiros .h feitos por vocês vêm entre aspas. Aqueles que já fazem parte das bibliotecas do C devem ser incluídos entre os sinais de menor e maior. Aqui vai um exemplo de um programa que inclui o "array.h",

    #include <stdlib.h>
    #include "array.h"
    
    main()
    {
      int x[5] = { 7, 4, 8, 9, 6 };
    
      escreve_array( x, 5 );
      printf("o maximo e: %d\n", max_array(x,5) );
    }

Para compilarmos este programa temos de indicar todos os ficheiros com extensão .c. Utilizando o compilador gcc, faziam qualquer coisa deste estilo,

    gcc prog.c array.c -o prog

Despedida

Se acompanharam a disciplina desde o início, ficaram a dominar as bases da programação de computadores. Ainda vos resta muita coisa para aprenderem no que diz respeito à programação, mas isso ficará para as cadeiras de Programação II, Estrutura de Dados e Algoritmos.

Para se ser bom a programar é necessário algum jeito e muita prática. É um bocado como o desporto. O Figo é bom a jogar futebol mas se não suasse a camisola nos treinos não tinha chegado onde chegou.

Quem quiser aprender mais sobre programação em C, poderá comprar este livro:

É um livro excelente para quem já tem os conceitos básicos da programação bem assimilados. Kerninghan e Ritchie foram as pessoas que inventaram a linguagem C.

Divirtam-se a programar!