![]() |
![]() |
![]() |
Neste capítulo são apresentados os elementos base de um programa em C.
![]() |
Começaremos pela estrutura base e pelo o processo de compilação e execução de um programa em C.
O programa mais pequeno em C é:
main()
}
{
É igual ao seguinte programa mais pequeno 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 é um texto qualquer delimitado pelos caracteres /*
e */
. Por exemplo:
/* O meu primeiro programa em C */
main()
{
/* Outro comentário */
}
Os comentários não podem ser como no exemplo seguinte:
/* O meu primeiro programa em C */
main()
{
/* Comentário /* Mais um comentário */ */
/* Ilegal */
}
![]() |
O seguinte programa produz uma saída, escrevendo um pequeno texto no ecrã:
main()
{
printf("Hello world!\n");
exit(0);
}
printf
e exit
são funções que constam na biblioteca standard da linguagem C, analisadas no capítulo 11.
![]() |
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 deteçã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 detetá-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 detetados 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 erros, de execução (p. ex. divisão por zero), ou os 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 efetuar 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 no capítulo 13. No entanto, é necessário saber que o pré-processador atua 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 diretamente código objeto (instruções do processador já em código binário).
O assembler traduz código em linguagem assembly (texto) para código objeto. Pode estar integrado no compilador. O código objeto é 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 uma linguagem muito compacta. Muitas das funções que fazem parte de outras linguagens não estão diretamente 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 prediletas dos programadores profissionais são:
Neste momento todos os compiladores seguem o standard internacional conhecido por ANSI C (American National Standards Institute).
![]() |
![]() |
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);
}
![]() |