![]() |
![]() |
![]() |
Neste capítulo veremos os elementos mais básicos de um programa em C.
Começaremos pela estrutura básica de um programa em C e examinaremos o processo de
compilação e de execução dos programas.
O mais curto programa em C que é possível escrever é o seguinte:
main()
}
{
É equivalente ao seguinte programa em PASCAL:
Program Minimum;
begin
end.
Todo o programa em C deverá conter uma e só uma função main()
.
As chavetas { e } agrupam
instruções, sendo equivalentes às palavras chave begin
e end
do PASCAL.
É possível colocar comentários em qualquer posição de um programa em C. Um
comentário é qualquer texto delimitado pelos caracteres /*
e */
. Por exemplo:
/* O meu primeiro programa em C */
main()
{
/* Outro comentário */
}
Os comentários não podem ser imbricados. Assim, o exemplo seguinte:
/* O meu primeiro programa em C */
main()
{
/* Comentário /* Mais um comentário */ */
/* Ilegal */
}
é ilegal.
![]() |
O seguinte programa produz uma saída, escrevendo algum texto no écran:
main()
{
printf("Hello world!\n");
exit(0);
}
printf
e exit
são funções que existem na biblioteca standard da linguagem C. Veremos o que fazem mais
tarde.
![]() |
Os estados de desenvolvimento de um programa em C são geralmente os três que constam do título desta secção, ou seja:
No caso da detecção de qualquer erro em qualquer dos estados, todos eles deverão ser repetidos desde o início.
A criação dos programas fonte em linguagem C faz-se com o auxílio de um editor de
texto genérico, ou específico de um ambiente de desenvolvimento. Em geral, os ficheiros
de texto produzidos deverão ter a extensão .c
,
para poderem ser reconhecidos automaticamente pelo compilador como sendo ficheiros
contendo código fonte em C. Obviamente o conteúdo dos ficheiros deverá verificar
rigorosamente a sintaxe da linguagem C.
A compilação dos programas em C faz-se através da invocação de um compilador (p.
ex. no UNIX, o comando cc
). O comando de
compilação deverá ser seguido pelo nome do ficheiro que contém o código fonte
(geralmente com a extensão .c
). É também
comum colocar como parâmetros de chamada do compilador, várias opções de compilação
(p. ex. no UNIX, a indicação do nome do ficheiro executável com o resultado da
compilação).
Assim uma compilação básica poderia ser executada no UNIX através do comando:
cc program.c
onde program.c
é o nome do ficheiro contendo
o código fonte.
Se existirem erros de sintaxe no código fonte, o compilador detecta-los-á e indicará
a sua localização junto com uma breve descrição do erro. Erros na lógica do programa
apenas poderão ser detectados durante a execução do mesmo. Se o programa não contiver
erros de sintaxe o compilador produzirá código executável. Tratando-se de um programa
completo o código executável é colocado, por defeito, num ficheiro chamado a.out
(isto no UNIX). Se se pretender colocar o
resultado da compilação noutro ficheiro deverá utilizar-se a opção -o
:
cc -o program program.c
Neste caso o código executável é colocado no ficheiro program
que é já criado com os necessários direitos de execução (no UNIX).
Se a operação anterior tiver sucesso, a execução do programa compilado produzido faz-se simplesmente invocando-o como se fosse um comando do sistema operativo.
Durante a execução podem tornar-se evidentes mais alguns erros: erros de execução (p. ex. divisão por zero), ou erros que levem a que o programa não se comporte como esperado. Neste caso é necessário voltar à edição do programa fonte para corrigir a sua lógica, e depois efectuar também uma nova compilação para produzir a nova versão do código executável.
![]() |
Salientaremos aqui apenas os pontos principais do modelo de compilação da linguagem
C.
Esse modelo pode ser ilustrado através da figura seguinte.
O pré-processador será estudado em maior detalhe mais tarde. Contudo iremos adiantar
alguma informação mais básica agora.
O pré-processador actua apenas ao nível do código fonte, modificando-o. Trabalha apenas
com texto. Algumas das suas funções são:
#
. Por exemplo:
#include
- insere o conteúdo de um ficheiro
de texto no ficheiro corrente. Esses ficheiros são usualmente designados por cabeçalhos
(header files) e têm a extensão .h: #include <math.h>
- Insere o conteúdo
do ficheiro math.h com a declaração das funções matemáticas da biblioteca standard. #include <stdio.h>
- Idem para as
funções standard de entrada/saída. #define
- define um nome simbólico cujas
ocorrências no ficheiro serão substituídas por outro nome ou constante: #define MAX_ARRAY_SIZE 100
- substitui todas
as ocorrências de MAX_ARRAY_SIZE por 100. Alguns compiladores traduzem o código fonte (texto) recebido do pré-processador para linguagem assembly (também texto). No entanto são também vulgares os compiladores capazes de gerarem directamente código objecto (instruções do processador já em código binário).
O assembler traduz código em linguagem assembly (texto) para código objecto. Pode estar integrado no compilador. O código objecto é geralmente armazenado em ficheiros com a extensão .o (unix) ou .obj (ms-dos).
Se o programa referencia funções da biblioteca standard ou outras funções contidas
em ficheiros com código fonte diferentes do principal (que contém a função main()
), o linker combina todos os objectos com o
resultado compilado dessas funções num único ficheiro com código executável. As
referências a variáveis globais externas também são resolvidas pelo linker. Mais
pormenores mais tarde.
A linguagem C é muito compacta. Muitas das funções que fazem parte de outras linguagens não estão directamente incluídas na linguagem C. Temos como exemplo as operações de entrada/saída, a manipulação de strings e certas operações matemáticas.
A funcionalidade correspondente a estas e outras operações não faz parte integrante da linguagem, mas está incluída numa biblioteca externa, bastante rica e standard. Todas essas operações são executadas por via da invocação de funções externas definidas nessa biblioteca standard. Num dos últimos capítulos serão fornecidos detalhes acerca de algumas das funções da biblioteca standard do C.
Qualquer programador poderá desenvolver a sua própria biblioteca de funções, podendo até substituir algumas das funções standard, e também utilizar outras bibliotecas comerciais já existentes (p. ex. NAG, PHIGS, etc).
![]() |
Algumas das características do C que levaram a que se tornasse uma das mais populares linguagens de programação, são:
Algumas das razões que tornaram o C uma das linguagens predilectas dos programadores profissionais são:
Neste momento todos os compiladores seguem o standard internacional conhecido por ANSI C (American National Standards Institute).
![]() |
![]() |
1. Crie, compile e execute o seguinte programa em C:
void main(void)
{
int i;
printf("\t Número \t\t Quadrado\n");
for (i=0; i<=25; ++i)
printf("\t %d \t\t %d\n", i, i*i);
}
2. Crie um programa em C que escreva no écran o seu nome e endereço.
![]() |
2006
Antônio Paulo Neto