sexta-feira, 23 de outubro de 2009

Código Fonte... Parte III - Final (Estrutura)

Com os conceitos que vimos no post anterior, já estamos próximos (na verdade hoje é o dia) de fazer um código fonte que compile (gere um programa executável). Não necessáriamente, que funcione; afinal um programa pode compilar e mesmo assim não funcionar rsrs. Veremos isto mais a frente.

No primeiro post desta série, falamos sobre a necessidade de estruturar um texto. Separá-lo em parágrafos, pontuar corretamente, etc.
Este é o assunto de hoje: a estrutura de um código fonte em C.

A estrutura de um código fonte
Um típico código fonte em C é igual a este aqui embaixo.



//Programa para apresentar resultado da soma de dois números inteiros
#include <stdio.h>
#include "stdlib.h"
const int NUM2 = 10; //ESTE VALOR É UMA CONSTANTE
int main( )
{
int num1, resultado;
num1 = 5;
resultado = num1 + NUM2;
printf("O resultado da soma %d + %d eh igual a %d.\n",num1,NUM2,resultado);
system ("pause");
}


Vamos analisar este código linha a linha.

Comentários
Os comentários servem para esclarecer alguns pontos obscuros (obscuros? que não estão claros). Viu para que serve um comentário?
Como você viu acima, eu uso (e muito) os parênteses para fazer comentários.
No C, a forma de fazer um comentário é usando as barras paralelas //. Na verdade este é um dos padrões do C++, é o mais usado hoje em dia. Existe outro, que não vou comentar aqui. Esteja livre para procurar no Google qual é ele.
Assim sendo, a linha 1 é um comentário, que diz o propósito deste código fonte de forma simplificada. Há programadores que fazem verdadeiros cabeçalhos utilizando os comentários. Embora eles não sejam necessários, ajudam a esclarecer o código fonte. Esclarecer para nós programadores, porque para o C eles não significam nada! O C simplesmente os ignora. Repare que não tem ponto final (;) no fim dele.
Os comentários não precisam ficar separados em uma linha. Eles podem ser colocados no meio do código, após os comandos, como você pode ver na linha 4.
Lembre-se que TUDO o que for colocado após as barras paralelas é ignorado pelo C, mesmo que seja um comando válido.

Que # é esse? E porque não tem ;?
No post em que falei sobre compilação, falei sobre um tal de pré-processador, que é responsável por fazer alguns ajustes no código antes de 'entregá-lo' ao compilador.
É aí que entram as linhas 2 e 3. Nelas estão comandos para o pré-processador, por isto elas não seguem o padrão C, e sim o padrão do pré-processador.
O que elas fazem? Elas incluem (compliquei mais ainda rsrs). Para explicar o que elas incluem temos que ver outro conceito do C: as bibliotecas.

Bibliotecas
O Natal está se aproximando e eu já começo a lembrar do cheirinho das comidas especiais desta época: chester, rabanada, panetone, etc.
E o que isso tem a ver com Bibliotecas? Não era melhor falar em livros?
Vamos falar em livros agora e você vai entender o porquê desta instrodução.
As comidas especiais de Natal são tão especiais que só são feitas no Natal. Por isto, quem as faz não lembra exatamente como fazê-las, e por isto, recorre a livros de receita. (Não falei que ia chegar nos livros?)
Pois bem, algumas receitas são tão complexas que às vezes precisam de duas ou mais receitas que nem sempre estão num livro só. São necessários alguns livros.
O C também trabalha com seus 'livros de receitas'. Cada um destes 'livros' é chamado de biblioteca. Voltando as receitas culinárias; se quisermos passar uma receita para alguém teremos que copiar todas as partes das receitas que usamos para fazer aquela comida, mesmo que ela esteja em vários livros.
Agora vejam que idéia brilhante!
Um código fonte é na verdade uma 'receita', onde dizemos ao computador o que desejamos que ele faça. Se nossa 'receita' for complexa, nós usamos as bibliotecas. Só que, ao invés de copiar cada pedaço das várias 'receitas' dos vários livros, só precisamos dizer em que livro, ou melhor biblioteca, a receita está.
Isto é feito neste código pelas linhas 2 e 3. Elas incluem as bibliotecas que contém as receitas dos comandos printf (linha 10) e system (linha 11). Neste recurso que estou usando para exibir os códigos aqui no blog (Syntax Highlight), esses comandos aparecem em vermelho.
Existem várias bibliotecas (que são chamadas de especializadas), para os mais variados propósitos.
Se você reparou bem existe uma pequena diferença entre as linhas 2 e 3. Na linha 2, o nome da biblioteca está entre <>; já na linha 3, está entre " ". Este é um padrão para o local em que estas bibliotecas estão instaladas no seu computador, e indicam onde o pré-processador vai procurar por elas para poder incluí-las no código.
Os <> dizem para o pré-processador começar a procurar por elas no diretório padrão das bibliotecas ( se você instalou o Dev C++ no diretório sugerido pelo seu programa de instalação, este diretório é o C:\Dev-Cpp\include ). Já as " ", dizem para começar a procura pelo diretório onde o código fonte está salvo. Você pode usar qualquer um dos dois modos, conforme a sua necessidade.

Voltando ao código
O comando da linha 4 já é um conhecido nosso. Ele declara uma constante inteira e a inicializa com o valor 10.

Na linha 5, temos a função main. Esta merece uma atenção toda especial. Então vamos sair do código de novo rsrs.

A função main (Amém rsrs)
Se você fosse fazer alguma coisa dentre um um conjunto de quaisquer outras coisas, qual iria escolher para fazer?
Seguindo algum critério próprio, você decidiria por alguma delas. E o computador? Qual critério ele usa para escolher o que fazer?
Ele não usa critério nenhum (lembra que computador não pensa... ainda), quem diz onde ele deve começar somos nós programadores.
É aí que entra a main. Ela é a função principal de um programa executável. Todo programa executável tem que ter uma main (eu não conheço nenhum que não tenha, quem conhecer pode nos apresentar ;).
Antes da main, existe um identificador de tipo inteiro int. Ele pode, até, ser ignorado (o Dev C++ acrescenta ele, 'por baixo dos panos', quando compila o programa), você já deve ter visto alguns códigos sem ele. O que ele faz?
Ainda é cedo para explicar, voltaremos a este assunto mais a frente. Pode cobrar depois.
Depois da palavra main tem ( ). Dentro deles ficam os parâmetros da função main; que neste caso, não são usados e por isto os ( ) estão vazios. Parametros?
Parametros são dados e 'informações' que as funções usam para fazer o seu trabalho.
Lembra da linha 10? Nela está um comando (printf) que, geralmente, exibe alguma coisa na tela. O que ela tem que exibir e da forma que tem que exibir é 'informando dentro dos ( ).
Por hora é isto o que precisamos saber sobre a main. Vamos voltar ao código novamente (ou não).

Voltando ao código novamente (será?)
Na linha 6 temos um {. Para saber o que ele faz vamos sair do código ( de novo!) e explicar outro conceito fundamental do C: os blocos de comando.

Os blocos de comando
Podemos comparar os blocos de comandos da linguagem C ao parágrafo da linguagem escrita.
O parágrafo é o conjunto de frases que formam uma sequência com sentido, com lógica (tirei isto daqui); ou seja, são frases que tem a ver umas com as outras.
Blocos de comandos são comandos que estão relacionados entre si (simples assim). Todos trabalham juntos para cumprir uma tarefa. Um de cada vez, mas o objetivo final é o mesmo.
Um bloco de comando é iniciado com { e encerrado com }.
O bloco de comandos da main começa na linha 6 e acaba na linha 12.

Vamos (tentar) voltar ao código agora?
A resposta é não rsrsrs. Os outros comandos já são nossos velhos conhecidos :). São feitas algumas atribuições e o resultado é exibido na tela pelo comando da linha 10, do qual já falamos.
Aliás, o comando da linha 10 (o printf) é um comando muito importante, por isto faremos um post só para ele.
Você deve estar dizendo: Tem um comando na linha 11. O que ele faz?
Resposta: Descubra!!! (kkkkk)

Este código do nosso exemplo funciona. Pode criar um Arquivo fonte novo no Dev C++ e digitá-lo (ou copiá-lo). Ele está pronto para ser compilado.
Pode fazer alterações nos valores. E fazer suas próprias descobertas.
Quer uma dica sobre a linha 11? Pense em comentários.

Por hoje é só. Até o próximo post.

Nenhum comentário:

Postar um comentário