Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Mensagem();<br />
}<br />
void Mensagem (void)<br />
{<br />
printf ("Ola! Eu estou vivo.\n");<br />
}<br />
Usan<strong>do</strong> nossos conhecimentos de funções, podemos agora eliminar de vez aquela irritante mensagem de aviso que o<br />
compila<strong>do</strong>r tem nos <strong>da</strong><strong>do</strong>, muitas vezes, desde o início <strong>do</strong> nosso curso! Se quisermos que a função retorne algo,<br />
devemos usar a declaração return. Se não quisermos, basta declarar a função como ten<strong>do</strong> tipo-de-retorno void.<br />
Devemos lembrar agora que a função main() é uma função e como tal devemos tratá-la. O compila<strong>do</strong>r acha que a<br />
função main() deve retornar um inteiro. Isto pode ser interessante se quisermos que o sistema operacional receba um<br />
valor de retorno <strong>da</strong> função main(). Se assim o quisermos, devemos nos lembrar <strong>da</strong> seguinte convenção: se o programa<br />
retornar zero, significa que ele terminou normalmente, e, se o programa retornar um valor diferente de zero, significa<br />
que o programa teve um termino anormal. Se não estivermos interessa<strong>do</strong>s neste tipo de coisa, basta declarar a função<br />
main como retornan<strong>do</strong> void.<br />
As duas funções main() abaixo são váli<strong>da</strong>s e não geram mensagens de aviso:<br />
main (void)<br />
{<br />
....<br />
return 0;<br />
}<br />
void main (void)<br />
{<br />
....<br />
}<br />
Pronto. Estamos livres <strong>da</strong>quelas mensagens de aviso.<br />
7.5 - Arquivos-Cabeçalhos<br />
Arquivos-cabeçalhos são aqueles que temos man<strong>da</strong><strong>do</strong> o compila<strong>do</strong>r incluir no início de nossos exemplos e que<br />
sempre terminam em .h. Já vimos exemplos como stdio.h, conio.h, string.h. Eles, na ver<strong>da</strong>de, não possuem os<br />
códigos completos <strong>da</strong>s funções. Eles só contêm protótipos de funções. É o que basta. O compila<strong>do</strong>r lê estes protótipos<br />
e, basea<strong>do</strong> nas informações lá conti<strong>da</strong>s, gera o código correto. O corpo <strong>da</strong>s funções cujos protótipos estão no arquivocabeçalho,<br />
no caso <strong>da</strong>s funções <strong>do</strong> próprio C, já estão compila<strong>da</strong>s e normalmente são incluí<strong>da</strong>s no programa no<br />
instante <strong>da</strong> "linkagem". Este é o instante em que to<strong>da</strong>s as referências a funções cujos códigos não estão nos nossos<br />
arquivos fontes são resolvi<strong>da</strong>s, buscan<strong>do</strong> este código nos arquivos de bibliotecas.<br />
Se você criar algumas funções que queira aproveitar em vários programas futuros, ou módulos de programas, você<br />
pode escrever arquivos-cabeçalhos e incluí-los também.<br />
Suponha que a função 'int EPar(int a)', <strong>do</strong> segun<strong>do</strong> exemplo <strong>da</strong> página c720.html seja importante em vários<br />
programas, e desejemos declará-la num módulo separa<strong>do</strong>. No arquivo de cabeçalho chama<strong>do</strong> por exemplo de<br />
'funcao.h' teremos a seguinte declaração:<br />
int EPar(int a);<br />
O código <strong>da</strong> função será escrito num arquivo a parte. Vamos chamá -lo de 'funcao.c'. Neste arquivo teremos a<br />
definição <strong>da</strong> função:<br />
int EPar (int a)<br />
{<br />
if (a%2) /* Verifica se a e divisivel por <strong>do</strong>is */<br />
return 0;<br />
else<br />
return 1;<br />
}<br />
Por fim, no arquivo <strong>do</strong> programa principal teremos o programa principal. Vamos chamar este arquivo aqui de<br />
'princip.c'.<br />
#include <br />
#include "funcao.h"<br />
main ()<br />
{<br />
Pág. 50