Вы находитесь на странице: 1из 8

Captulo 1

Introduc ao
Alinguagem C e resultado de linguagens mais antigas como CPL
1
, BCPL
2
, B
3
. Por m a
linguagem C inuenciada diretamente pela linguagem B. A linguagem C foi lancada em 1972
pois era a linguagem do sistema operacional UNIX
4
.
Com a popularidade da micro computac ao, a linguagem C passou a ser usada com bastante
intensidade. Era a unica linguagem a garantir uma portabilidade nos programas desenvolvidos
para microcomputadores. Foi quando em 1983, um comit e ANSI (American National Standards
Institute) padronizou a linguagem C com 32 palavras chaves (27 originais e mais 5 incorporadas
pelo comit e ANSI). Para efeito de comparac ao, a linguagem BASIC
5
para os computadores
IBM-PC e compatveis possui 159 palavras chaves. A Tabela 1.1 apresenta as palavras chaves da
linguagem C.
A linguagem C combina o controle e as estruturas de dados de uma linguagem de alto nvel
com a facilidade de trabalhar em equipamento (m aquinas) em um nvel associado e aproximado
com a linguagem de montagem (assembly language). Possui uma sintaxe concisa bastante atra-
tiva para os programadores sendo que os compiladores geram um objeto muito ecaz.
As linguagens de alto nvel s ao linguagens ricas em tipos de dados. S ao os tipos de dados
que denem um conjunto de valores que uma vari avel pode armazenar e o conjunto de operac oes
que podem ser executados com estas vari aveis
6
.
1
Do ingl es Combined Programming Language (Linguagem de Programac ao Combinada) desenvolvida no incio
dos anos 60 no Laborat orio de Matem atica da Universidade de Cambridge em associac ao com a Universidade de
Londres.
2
Do ingl es Basic CPL (Basic Combined Programming Language) - Linguagem de Programac ao B asica Combi-
nada desenvolvida por Martin Richards na Universidade de Cambridge em 1966. Era uma linguagem baseada em
CPL direcionada particularmente para desenvolver compiladores.
3
Linguagem de programac ao B foi fortemente inuenciada pela linguagem BCPL e implementada por ken
Thompson e com contribuic oes de Dennis Ritchie em 1969.
4
Unix e um sistema operacional port avel, multitarefa e multiusu ario originalmente criado por Ken Thompson,
que trabalhava nos Laborat orios Bell da AT&T. O sistema operacional UNIX foi o primeiro sistema operacional n ao
escrito inteiramente em linguagem de m aquina, apenas o seu n ucleo era em linguagem de m aquina.
5
Do ingl es Beginners All-purpose Symbolic Instruction Code e uma linguagem de programac ao criada com ns
acad emicos pelos professores John George Kemeny e Thomas Eugene Kurtz, em 1964 no Dartmouth College.
6
Os conceitos alto nvel e baixo nvel s ao um tanto relativo. Um programador da linguagem Java pode considerar
1
CAP

ITULO 1. INTRODUC

AO 2
auto double int struct
break else long switch
case enum register typedef
char extern return union
const oat short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Tabela 1.1: Palavras chaves da linguagem C.
Linguagens de ALTO N

IVEL: s ao as linguagens de programac ao ricas em tipos de dados e


est ao o mais longe possvel do c odigo da m aquina. Exemplos: C++, JAVA, ADA, C,
MODULA-2, EIFFEL, PASCAL, COBOL, FORTRAN, BASIC.
Linguagens de BAIXO N

IVEL: s ao as linguagens de programac ao mais pr oximas ao c odigo


da m aquina. Portanto, pobres em tipos de dados (menos abstrata). Um bom exemplo e a
linguagem ASSEMBLY, que trabalha diretamente com os registradores do microproces-
sador.
1.1 Componentes para o desenvolvimento de programas
Os componentes necess arios para o desenvolvimento de programas em computadores eletr onicos
envolvem: um processador de texto, um compilador, um ligador (linker) e depuradores de erros
em tempo de execuc ao. A seguir estes componentes s ao descritos em maiores detalhes.
Processador de texto: e usado para editar o texto do programa fonte (c odigo fonte) ou modicar
o texto de um programa j a existente.
Pr e-processadores: o programa inicia com o pr e-processamento de diretivas que ativam a
substituic ao de macros, compilac oes condicionais e a inclus ao de outros arquivos textos
com c odigo fonte ao programa. Exemplo: um arquivo de cabecalhos (header les ou pro-
totypes les) suprem detalhes sobre as func oes das bibliotecas que est ao sendo utilizadas
no c odigo fonte do programa. O pr e-processador l e um arquivo texto de c odigo fonte, ex-
pande alguma macro, inclui algum arquivo de cabecalho (prot otipos) e escreve o resultado
em um arquivo texto intermedi ario que e lido pelo compilador.
a linguagem C uma linguagem de baixo nvel, enquanto um programador de linguagem de montagem assembly
language consideraria a linguagem C de alto nvel. Um programador da linguagem Python pode considerar a
linguagem Java de baixo nvel, embora uma linguagem orientada ` a objetos como a linguagem Java raramente seja
considerada de baixo nvel.
CAP

ITULO 1. INTRODUC

AO 3
Compilador: o compilador converte o arquivo gerado pelo pr e-processador em um c odigo ob-
jeto (object code), que cont em c odigos execut aveis de m aquina e informac oes para o lig-
ador (linker). Exemplo: detalhes de func oes da biblioteca padr ao requeridas. Alguns com-
piladores podem gerar uma listagem combinada entre o compilador e o c odigo de mon-
tagem (assembly code), que apresenta o c odigo original do programa em C e as sentencas
em linguagem de montagem (assembly language).
Ligador (linker): exceto para os programas muito especializados (programas embarcados ou
embutidos
7
), a maioria dos programas requer func oes da biblioteca padr ao. O programa
ligador junta (une) os arquivos de c odigo objeto, bibliotecas padr ao e outros arquivos ger-
ados necess arios para formar o arquivo execut avel (em c odigo de m aquina). O programa
execut avel pode ser executado direto da linha de comando do prompt do sistema opera-
cional.
Execuc ao do programa: o usu ario, por interm edio do prompt do sistema operacional, pode
executar o programa. Durante a execuc ao do programa, dados podem entrar via o teclado
(entrada padr ao) e ou arquivos e os resultados podem sair para o monitor de vdeo (sada
padr ao), arquivos, impressoras e ou dispositivos de disco ou tas.
Depuradores (debugger): muitos dos ambientes de programac ao possuem um depurador do
c odigo autom atico que ajuda na detecc ao e na correc ao de erros de compilac ao, de ligac ao,
erros de execuc ao e erros na l ogica de programac ao. Estes dois ultimos aparecem somente
durante a execuc ao do programa (em tempo de execuc ao). Os depuradores permitem in-
serir pontos de quebras ao longo da execuc ao do programa. Isto signica que se pode exe-
cutar o programa at e umponto previamente marcado. Por ultimo, os depuradores permitem
a visualizac ao da mem oria do programa, provendo informac oes sobre as mesmas, princi-
palmente o conte udo das vari aveis existentes no programa. Os depuradores s ao geralmente
interpretadores. Um interpretador executa o c odigo fonte uma linha por vez, executando a
instruc ao especca contida nessa linha. Por isso um programa interpretado e mais lento
que um programa compilado, al em de consumir mais mem oria durante a interpretac ao.
Um ambiente integrado de desenvolvimento possui um processador de texto, habilitando o
programador a escrever ou modicar o c odigo fonte e ao pressionar uma tecla pr e denida ou os
bot oes controlados pelo mouse, ativa-se o processo de compilac ao e de ligac ao. Se, em tempo
de compilac ao e ou de ligac ao, ocorrerem erros, o programa para e mostra as mensagens de erro,
possibilitando ao usu ario corrigi-las. Se a compilac ao e a ligac ao completaram-se sem erros,
signica que o programa execut avel foi gerado, podendo ser executado dentro do ambiente (sob
o controle do depurador) ou fora, direto no prompt do sistema operacional.
A Figura 1.1 apresenta o diagrama de uxo mostrando a sequ encia de eventos necess arios
para a obtenc ao de um programa execut avel a partir de um arquivo fonte.
Quando um erro pode ocorrer (Figura 1.1):
7
Programas embutidos no hardware.
CAP

ITULO 1. INTRODUC

AO 4
Figura 1.1: Diagrama de uxos mostrando a sequ encia de eventos necess arios ` a implementac ao
de um programa na linguagem C.
Durante a compilac ao (em tempo de compilac ao): erros de sintaxe, que indicam que o pro-
grama n ao est a escrito conforme as regras sint aticas da linguagem. Exemplo: a falta de um
ponto e vrgula ao nal de uma sentenca ou uma palavra reservada da linguagem escrita
errada, s ao erros de sintaxe.
Durante a ligac ao (em tempo de ligac ao): m ultiplas denic oes de uma refer encia (duas
func oes com o mesmo nome) ou uma refer encia indenida (uma func ao chamada pelo
programa e o c odigo desta func ao n ao foi encontrado).
Durante a execuc ao (em tempo de execuc ao): o programa aborta em func ao de ocorr encia de
um erro em tempo de execuc ao (run time), por exemplo, uma divis ao por zero ou uma
excec ao que n ao produz o resultado correto.
CAP

ITULO 1. INTRODUC

AO 5
1.2 Estrutura de um programa em C
O Programa 1.2.1 ilustra o esqueleto de um programa na linguagem C. Os coment arios indicam
os locais dos c odigos de um programa.
Programa 1.2.1 Esboco do esqueleto de um programa em linguagem C.
/ i n c l u s a o de pr e pr oc e s s ador e s /
/ de c l ar ac ao de v a r i a v e i s g l o b a i s /
i nt main ( ) { / i n c i o de bl oco de c odi go da f unc ao main /
/ de c l ar ac ao de v a r i a v e i s l o c a i s ao bl oco de c odi go da f unc ao main /
/ s e qu e nc i a de e x p r e s s o e s e comandos /
} / f i m de bl oco de c odi go da f unc ao main /
O Programa 1.2.2 e um programa bem simples utilizado para dar uma breve e simples
introduc ao de como e a estrutura de um programa escrito na linguagem C.
Programa 1.2.2 Um programa bem simples escrito na linguagem C.
/ um programa bem s i mp l e s e s c r i t o em l i nguagem C /
# i n c l u d e <s t d i o . h>
i nt main ( ) {
p r i n t f ( CI

ENCIA DA COMPUTAC

AO ) ;
g e t c h a r ( ) ;
}
Analisando o programa 1.2.2 tem-se:
/* um programa bem simples, escrito em linguagem C */ Esta linha e uma linha de co-
ment ario.
A sequ encia / marca o incio de um bloco de coment ario e para todo incio de bloco de
coment ario tem-se um m de bloco de coment ario, representado pela sequ encia /. Tudo
que estiver entre / e / n ao gera c odigo. Desta forma, pode-se comentar v arias linhas
apenas marcando o incio e o m do bloco de coment ario.
OBSERVAC

AO: a pr atica de se comentar o c odigo fonte e uma das formas de melhorar a
legibilidade do c odigo fonte.

E uma pr atica de extrema import ancia e que deve ser adotada
(praticada).
CAP

ITULO 1. INTRODUC

AO 6
#include <stdio.h> Sentencas que comecam com um smbolo de sustenido (#) s ao diretivas
para o pr e-processador. N ao s ao linhas de c odigo execut aveis, mas indicac oes para o
compilador. Neste caso a sentenca #include <stdio.h> informa ao pr e-processador do
compilador para incluir o arquivo padr ao de cabecalhos (headers). Neste caso inclui as
declarac oes especcas da biblioteca padr ao de entradas e sadas da linguagem C, que
ser ao utilizadas no programa mais tarde.
int main() Esta linha corresponde ao incio da declarac ao da func ao main. A func ao main e
o ponto por onde todo programa em C comeca a sua execuc ao, independente de onde ela
esteja dentro do c odigo fonte, no incio, no meio ou no m. Por esta raz ao, e essencial que
todo programa escrito na linguagem C tenha uma func ao main.
A func ao main e seguida de um par de par enteses (), isto porque e uma func ao. Na lin-
guagem C todas as func oes s ao seguidas por um par de par enteses () que, opcionalmente,
podem-se incluir argumentos. O conte udo (o c odigo) da func ao main segue imediatamente
a sua declarac ao formal e e delimitado por chaves ({}) que signicam incio e m do bloco
de c odigos da func ao main.
printf(CI

ENCIA DA COMPUTAC

AO); Esta instruc ao faz o que e de mais importante
neste programa. A func ao printf e uma func ao da biblioteca padr ao da linguagem
C que escreve na sada padr ao (monitor), neste caso, CI

ENCIA DA COMPUTAC

AO. O
prot otipo da func ao printf e declarada no arquivo de cabecalhos stdio.h. Para fazer uso,
habilitar este arquivo, deve-se inclu-lo (#include <stdio.h>).
Percebe-se que a sentenca termina com um ponto e vrgula (;). Este caractere indica o nal
da instruc ao e deve ser colocado depois de toda instruc ao, em qualquer programa escrito
em C (um dos mais comuns erros de sintaxe dos programadores de C e esquecer de incluir
um ponto e vrgula (;) no nal de cada instruc ao).
getchar() Esta instruc ao espera que o usu ario pressione a tecla ENTER. Muitos ambientes
de compilac ao abrem uma janela de console, executa o programa e ent ao fecha a janela.
Este comando espera que a tecla ENTER seja pressionada, para depois fechar a janela de
console, encerrando a execuc ao do programa.
O Programa 1.2.2 poderia ser reescrito da maneira apresentada no Programa 1.2.3.
Programa 1.2.3 Exemplo de um programa com c odigos escritos na mesma linha
/ / um programa bem s i mp l e s e s c r i t o em l i nguagem C
# i ncl ude <s t d i o . h>
i nt main ( ) { p r i n t f ( CI

ENCIA DA COMPUTAC

AO ) ; g e t c h a r ( ) ; }
Para uma melhorar a legibilidade do c odigo, lanca-se m ao de: linhas em branco, sempre
escrever uma instruc ao por linha e nalmente utilizar a indentac ao. Indentac ao seria deixar
um espaco, um recuo da esquerda para a direita.

E utilizado tanto para uma linha, como para
CAP

ITULO 1. INTRODUC

AO 7
um conjunto de linhas de c odigo. Do Programa 1.2.2 ao Programa 1.2.3 percebe-se uma certa
diferenca quanto a legibilidade do c odigo. Perceba, que n ao se escreve logo abaixo do inicio
de bloco da func ao main e sim d a-se um espaco (recuo) e ent ao comeca a pr oxima linha de
instruc ao. Perceba que tudo escrito na mesma linha compromete a legibilidade do c odigo fonte
(Programa 1.2.3).
1.3 Mapa de mem oria em C
Um programa compilado na linguagem C cria e usa quatro regi oes na mem oria do computador.
A Figura 1.2 esboca estas regi oes, que s ao: a area de c odigo, a area de dados, a area de heap e a
area de pilha.
Figura 1.2: Exemplo do mapa de mem oria de um programa escrito na linguagem C.
A area de pilha possui diversos usos durante a execuc ao de um programa.

E o local onde se
guarda o endereco de retorno das chamadas de func oes, os argumentos das func oes e as vari aveis
locais. Al em do estado atual da UCP
8
(Unidade Central de Processamento).
O heap e uma regi ao de mem oria livre que pode ser utilizada (alocada) durante a execuc ao de
um programa. Por isto diz-se que e uma area de alocac ao din amica, porque da mesma maneira
que se aloca, pode-se liberar a alocac ao de mem oria previamente alocada.
Como a area de pilha e a area de heap s ao manipuladas durante a execuc ao do programa (em
tempo de execuc ao), tamb em s ao ditas areas din amicas.
8
Do ingl es Central Processing Unit - CPU.
CAP

ITULO 1. INTRODUC

AO 8
A area de c odigo e destinada para o c odigo gerado do programa al em das constantes inteiras e
caracteres. A area de dados e destinada para os dados, por exemplo, constantes de ponto utuante
(oat e double), constantes strings
9
, as vari aveis globais e etc.
Este e o comportamento geral no que se refere ao mapa de mem oria de um programa compi-
lado em C e algumas variac oes podem existir conforme o fabricante do compilador.
Exerccios
1. Em se tratando de linguagens de programac ao. O que os tipos de dados denem?
2. Qual e a unica func ao que todo programa em linguagem C deve ter?
3. Qual e o smbolo usado para sinalizar o incio e m de blocos de c odigo?
4. Qual e o smbolo utilizado para nalizar a maioria das linhas de c odigo de um programa
escrito em C?
5. Qual das opc oes a seguir e um coment ario correto, em se tratando de linguagem C?
a) */ coment arios */
b) ** coment arios **
c) /* coment arios */
d) { coment arios }
e) % coment arios %
f) ! coment arios !
6. Como se divide a mem oria de um programa compilado em C?
7. No modelo de mem oria de um programa compilado em C, por que as areas de heap e pilha
s ao ditas areas de mem oria din amica?
9
Uma string signica uma sequ encia de caracteres.