Mostrando postagens com marcador código fonte. Mostrar todas as postagens
Mostrando postagens com marcador código fonte. Mostrar todas as postagens

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.

quarta-feira, 21 de outubro de 2009

Código Fonte... Parte I (A volta da teoria rsrs)

Hoje vamos começar a analisar o CÓDIGO FONTE.

No post anterior, falamos sobre a instalação da IDE Dev C++ e de uma funcionalidade de todas as IDEs (não conheço nenhuma que não tenha): a detecção de erros de compilação.

(Note que eu disse de compilação e não apenas erros. Existem outros erros que não são 'detectáveis' (ainda ;), como é o caso dos erros 'lógicos' (ou seriam, ilógicos?).

Como uma IDE detecta um erro de compilação?

Imagino que você tenha se feito esta pergunta (se não fez, deveria rsrs). Agora vem a resposta.
Leia com atenção o texto abaixo:
nÁo mãgicaê?simPle5m ais FÂcil. paRece~eq.ue

Entendeu alguma coisa? Nem eu rsrs.

Na verdade, o que eu queria escrever era:
Não é mágica! É mais fácil que parece.

Por que você conseguiu ler a frase na 2ª vez e não na 1ª ? Simples! Porque ela foi escrita de forma errada na 1ª vez.
Então, como saber se uma frase está certa ou errada? O que controla isto?

Sintaxe e análise sintática

O C é uma linguagem de programação de computadores, assim como o Português (idioma) é uma linguagem de comunicação (é isso mesmo?). O que as duas tem em comum? Por serem linguagens, elas são reguladas para que todos que as usam se entendam entre si? Imagine se cada pessoa falasse ou escrevesse o Português da forma que bem entendesse? (Tem gente que o faz, mas, para efeito de estudo, vamos ignorar isso!) Ninguém iria se entender.
O que regula uma linguagem é a SINTAXE.
Existe uma padronização na linguagem. Se alguma coisa está fora dos padrões se diz que está errada (conta uma novidade).
Para saber se algo está errado, é feita uma análise chamada de ANÁLISE SINTÁTICA. Que nada mais é que uma comparação do que está sendo escrito/dito com o padrão.

Conhecendo os padrões

Existem alguns padrões no Português que são conhecidos. Às vezes, são 'atropelados', mas que existem existem. (Eu mesmo devo ter cometido barbaridades neste texto!)
Exemplo simples:
Nomes próprios começam sempre com letra maiúscula - Maria e João.
Existem muitos outros, que eu acredito que você conheça; pelo menos os mais comuns.

A linguagem C também possui os seus padrões. É fazendo uma comparação com estes padrões que as IDEs conseguem encontrar os erros de compilação.

Um outro fato que deve ser levado em conta nesta análise, já que o código fonte é um texto, é a estrutura do texto.
Um texto deve ter uma estrutura definida. Você não conseguirá se fazer entender se não seguir esta estrutura.
Um exemplo claro disto é o conceito de sinais de pontuação e parágrafo. Nós não pensamos com parágrafos (ou pensamos?)! Mas, tente escrever um texto longo sem parágrafos ou sinais de pontuação.

No próximo post, veremos os padrões do C.

segunda-feira, 19 de outubro de 2009

Compilação (mais um pouco de teoria rsrs)

Antes de irmos à prática (que é a forma mais eficiente de se aprender),vamos a mais um pouquinho de teoria rsrs!!!

Vamos programar?
Programar é a arte de fazer programas (pode copiar a frase que eu deixo ;).
Um programa é um conjunto de instruções na linguagem que o computador entende, chamada de linguagem de máquina. Aquela que descobrimos nos posts anteriores.
Voltando a este assunto, também falamos que a linguagem C não é essa linguagem, e sim um meio termo entre a linguagem humana e a linguagem do computador, e precisa ser traduzida para que o computador a entenda.
A tradução da linguagem C para a linguagem de máquina é feita por um programa (isso mesmo!) chamado COMPILADOR. Além disso, tem um outro programa chamado LINKER, que faz o 'arremate' (alguém pode me sugerir uma palavra melhor, por favor) dessa 'tradução', juntando (montagem) algumas funções essenciais para o seu funcionamento.
Como isso é feito? De forma resumida é basicamente assim:

1. Usando o C criamos um 'script'/'roteiro' (CÓDIGO FONTE) que 'diz' tudo o que queremos que o computador faça.

2. Esse CÓDIGO FONTE passa por um pré-processador, que realiza alguns ajustes nele (veremos que ajustes são esses quando começarmos com a prática).

3. O CÓDIGO FONTE processado passa pelo COMPILADOR (e o ASSEMBLER, que não veremos em detalhes aqui), que gera um arquivo 'traduzido' chamado de CÓDIGO OBJETO, que apesar de já estar em linguagem de máquina, não pode ser executado pelo computador.

4. Este CÓDIGO OBJETO passa então pelo LINKER, que faz o 'arremate' do programa, gerando um o CÓDIGO EXECUTÁVEL.

5. Para que esse CÓDIGO EXECUTÁVEL funcione ele tem que ser 'carregado' para a MEMÓRIA, mas isto já é com o sistema operacional.





Dito isto, agora sabemos o que é necessário para criar um programa em si, que seria exatamente:

-Um programa para criar o CÓDIGO FONTE,

-Um COMPILADOR,

-E um LINKER.

O CÓDIGO FONTE pode ser criado com qualquer editor de texto não-formatado (word não serve!), como, por exemplo, o Bloco de Notas do Windows.

Já o COMPILADOR e o LINKER, precisam ser adquiridos (não necessáriamente comprados). Existem vários, inclusive gratuitos, disponíveis na Web.

Todos estes componentes necessários podem ser adquiridos de forma integrada, naquilo que se chama de IDE (integrated development environment, traduzindo: ambiente de desenvolvimento integrado).

Em nossos estudos, usaremos a IDE gratuita (e muito boa!) Dev C++ da Bloodshed que você pode baixar aqui e aqui.

No próximo post veremos a instalação, algumas configurações, e alguns exemplos desta IDE.