Você está na página 1de 8

Centro de Tecnologia Microgenios - Todos os direitos reservados

Clique aqui para Imprimir o doc

umento

Estrutura da Linguagem C

1.0 Estrutura de um programa em C


1.1 Prottipos de Funes

Estrutura de um programa em C
Todo programa escrito em C consiste em uma ou mais funes, tendo como
poarticularidade deste fato a possibilidade de construir programas modulares e
estruturados. O programa principal escrito em C uma funo. O C uma linguagem
estremamente estruturada e exige do programador domnio adequado de tal conceito.
Veja a seguir, o menor programa possvel de ser escrito em C:
main( )
{
}
em que:
main() - a primeira e principal funo a ser executada
{

- inicia ou abre o corpo da funo

- finaliza ou fecha o corpo da funo

A funo main() a principal instruo a ser considerada em um programa escrito na linguagem C e deve
estar presente em algum lugar do programa, pois ela que marca o ponto de inicializao do processo de
execuo do programa.
A seguir veremos um modelo de escrita de um programa em C, com todas as definies e comentrios.
Acompanhe:
[ blocos de comentrios de grande importncia na documentao do programa]
[<definies de pre-processamento - cabealhos>]
[<declarao das variveis globais>]

[<tipo>] nome_da_funcao([<parmetros>])
[<declarao de parmentros>]
{
/*
Este trecho reservado para o corpo da funo_nome, com a declarao de suas variveis locais, seus
comandos e funes de trabalho. Esta funo pode ser chamada de sub-rotina do programa.
*/
[return ou return() ou return(valor)]
}

void main([<parmetros>])

{
/*
Este trecho reservado para o corpo da funo, com a declarao de suas variveis locais, seus comandos
e funes de trabalho. Aqui esto os primeiros comandos que sero executados no programa.
*/
}

Toda a informao situada entre colchetes "[" e "]" indica informaes que podem ou no estar presentes
em um programa.
Vamos comentar cada bloco de programa:
O primeiro bloco: Os comentrios gerais
[ blocos de comentrios de grande importncia na documentao do programa]
O programador poder inserir ou no o comentrios em seu programa. Por conveno, importante
colocarmos sempre os cabealhos nos programas, pois a apresentao do programa.

O segundo bloco: O cabealho


[<definies de pre-processamento - cabealhos>]
[<declarao das variveis globais>]

Neste trecho do programas podemos declarar todo o cabealho do nosso programa assim como definir
variveis globais que podero ser utilizadas em todas as funes do nosso programa.
Exemplo de cabealho:
#include "minhas_funcoes.h" // incluimos em nosso programa as bibliotecas de funes que esto no
arquivo minhas_funcoes.h.
int a ;
//definimos a varivel a como inteiro e como sendo global
int b;
//definimos a varivel b como inteiro e como sendo global
O terceiro bloco: As funes de subrotinas
[<tipo>] nome_da_funcao([<parmetros>])
[<declarao de parmentros>]
{
/*
Este trecho reservado para o corpo da nome_da_funcao, com a declarao de suas variveis locais, seus
comandos e funes de trabalho. Esta funo pode ser chamada de sub-rotina do programa.
*/
[return ou return() ou return(valor)]
}
Este ltimo bloco trata-se de uma funo que carrega o nome nome_da_funcao. Seu tipo pode ou no ser
explicitado. Caso no seja, qualquer funo ser do tipo int por default.
Esta funo no faz parte da funo main() e dever ser chamada em algum momento pelas funo main()
ou por outra funo para seja executados seus comandos. Podemos no momento da chamada da funo
enviar parmetros (estudaremos mais sobre as funes a seguir).
No final da funo, encontramos o comando return, cujo objetivo retornar a funo que a chamou um
valor de retorno da funo.
No obrigatrio o uso do comando return, caso no precisemos retornar nenhum valor na funo.
Exemplo de funo de subrotina:
void funcao(void) {
portb = ~portb;
return;
}

O quarto bloco: A funo main()


void main([<parmetros>])

{
/*
Este trecho reservado para o corpo da funo, com a declarao de suas variveis locais, seus comandos
e funes de trabalho. Aqui esto os primeiros comandos que sero executados no programa.
*/
}

A funo main() ser a primeira a ser executada pelo processador. Junto a funo main(), temos o
modificador de tipo void que tem a funo de declarar que a funo main() no deve retornar nenhum
valor.
A manipulao de programas em linguagem C para microcontroladores diferente de trabalharmos com
programas para PC's, pois nos computadores PC's existem o sistema operacional que receber o retorno
da funo main(). Nos microcontroladores, como no possuimos um sistema operacional rodando em
paralelo com o programa, no podemos retornar nenhum valor na funo main(). Para este caso, devemos
sempre iniciar a funo main() com o modificador de tipo nulo void.
Exemplo de funo main():
void main() {
PORTB = 0;
TRISB = 0;
PORTB = ~PORTB;
Delay_ms(1000);
}

INFORMAES IMPORTANTISSIMAS:
AS FUNES DE SUBROTINAS DEVEM SER COLOCADAS ANTES DA FUNO MAIN(), CASO
CONTRRIO OCORRER ERRO DE COMPILAO DO PROGRAMA. ISSO OCORRE PORQUE no
podemos usar uma funo sem declar-la previamente. PARA COLOCARMOS
FUNES ABAIXO DA FUNO MAIN() FAZ NECESSRIO UTILIZAR OS PROTTIPOS DE
FUNES, CUJO OBJETIVO MOSTRAR AO COMPILADOR O TIPO, NOME E PARMETROS DA
FUNO DAS SUBROTINAS.

Exerccio 01:
Vamos anlisar um exemplo de programa em linguagem C disponvel no prprio compilador mikroC
como exemplo. Em princpio, no quero que voc entenda o funcionamento do programa, mas quero que
voc identifique os principais blocos de funes desse programa. Vejamos:
/*
* Project name:
PWM_Test_01 (PWM library Demonstration)
* Copyright:
(c) MikroElektronika, 2005.
* Test configuration:
MCU:
P18F8520
Dev.Board:
BIGPIC3
Oscillator:
HS, 10.0 MHz
Ext. Modules:
SW:
mikroC v5.00
* NOTES:
None.
*/
unsigned short j, oj;
void InitMain() {
PORTB = 0;
TRISB = 0;
ADCON1 |= 0x0F;

PORTA = 255;
TRISA = 255;
PORTC = 0x00;
TRISC = 0;
Pwm_Init(5000);
}//~
void main() {
initMain();
j
= 127;
oj
= 0;
Pwm_Start();
while (1) {
if (Button(&PORTA, 0,1,1))
j++ ;
if (Button(&PORTA, 1,1,1))
j-- ;
if (oj != j) {
Pwm_Change_Duty(j);
oj = j;
PORTB = oj;
}
Delay_ms(200);
}
}//~!

Resposta:

Primeiro bloco: Os comentrios

/*
* Project name:
PWM_Test_01 (PWM library Demonstration)
* Copyright:
(c) MikroElektronika, 2005.
* Test configuration:
MCU:
P18F8520
Dev.Board:
BIGPIC3
Oscillator:
HS, 10.0 MHz
Ext. Modules:
SW:
mikroC v5.00
* NOTES:
None.
*/
Este bloco do programa so comentrios e so resposvel pela parte "documental do programa". No
momento da compilao, esses textos sero descartados pelo compilador.

Segundo Bloco: O
unsigned short j, oj;

cabealho

Neste trecho do programas definido o cabealho do programa, e nele foi declarado as varivel globais
do programa.

Terceiro Bloco:
void InitMain() {

as subrotinas

PORTB = 0;
TRISB = 0;
ADCON1 |= 0x0F;
PORTA = 255;
TRISA = 255;
PORTC = 0x00;
TRISC = 0;
Pwm_Init(5000);
}//~
Esta funo uma subrotina do programa, e foi chamada pelo programador de InitMain();

Quarto Bloco: as funo main()

void main() {
initMain();
j
= 127;
oj
= 0;
Pwm_Start();
while (1) {
if (Button(&PORTA, 0,1,1))
j++ ;
if (Button(&PORTA, 1,1,1))
j-- ;
if (oj != j) {
Pwm_Change_Duty(j);
oj = j;
PORTB = oj;
}
Delay_ms(200);
}
}//~!
Apesar do funo main() ser a ltima na ordem de escrita do programa, ela ser a primeira funo a ser
executada pelo processador.

Dicas:

Porque usar funes de subrotinas ?

Para permitir o reaproveitamento de cdigo j construdo(por voc ou por outros


programadores);
Para evitar que um trecho de cdigo que seja repetido vrias vezes dentro de um
mesmo programa;
Para permitir a alterao de um trecho de cdigo de uma forma mais rpida.
Com o uso de uma funo preciso alterar apenas dentro da funo que se
deseja;
Para que os blocos do programa no fiquem grandes demais e, por
conseqncia, mais difceis de entender;
Para facilitar a leitura do programa-fonte de uma forma mais fcil;
Para separar o programa em partes(blocos) que possam ser logicamente
compreendidos de forma isolada.
voltar para o topo da pgina

Prottipos de Funes
No podemos usar uma funo sem declar-la previamente. Trata-se duma
instruo geralmente colocada no incio do programa ou do arquivo,
obrigatoriamente antecedendo a definio e a chamada da funo. O prottipo
informa ao compilador o tipo que a funo retorna, o nome da funo, bem como
os parmetros que ela recebe. Eis um exemplo:

void minha_rotina (); //prottipo de funo, esta linha de programa deve ser
colocada no topo do programa , junto com as declaraes;
//....
void main()
{
// aqui esta meu programa principal
}

//***************** funo de subrotina ********************


void minha_rotina()
{
//aqui esta os comandos da sua subrotina
}

Confome podemos ver no programa acima, a funo de subrotina minha_rotina() ficou


em depois da funo main(), nesse caso, necessariamente, devemos colocar o prottipo
de funo (linha de programa com o cabealho da funo de subrotina) no topo do
programa, caso contrrio teremos erro de compilao pois o no podemos utilizar
nenhuma funo antes de declar-la. No caso de colocarmos as funes de subrotinas
antes da funo main() no programa, no precisamos declarar os prottipos de funes
no programa.

voltar para o topo da pgina

Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programao


em C
Microgenios 1998 - 2007. Todos os direitos reservados. proibido cpia parcial ou
integral desse material sem prvio aviso. Maiores informaes:
suporte@microgenios.com.br