domingo, 6 de setembro de 2009

Curso de C - Aula 2: Compilador

Terminei a postagem da semana passada falando de compiladores, espero que tenham gostado.

Vamos relembrar pontos interessantes: Usar um compilador, uma linguagem compilada não é o mesmo que usar uma linguagem interpretada, como Perl. Existem diferenças na forma de execução. Porém, a implementação é opção de quem criou a linguagem.

Um programa em C é elaborado em dois passos básicos:

O programa é escrito em texto puro num editor de texto simples. Tal programa se chama "código fonte" (source code em inglês). Passamos o código fonte para o compilador que é o programa que gera um arquivo num formato que a máquina entenda.
O compilador trabalha, em geral, em duas fases básicas:

O compilador gera, através do código fonte, um código intermediário que ajuda a simplificar a "gramática" da linguagem. Como o processamento subsequente agirá: um arquivo "objeto" será criado para cada código fonte. Depois, o linkador junta o arquivo objeto com a biblioteca padrão. A tarefa de juntar todas as funções do programa é bastante complexa. Nesse estágio, o compilador pode falhar se ele não encontrar referências para a função.

Para evitar a digitação de 2 ou 3 comandos você pode tentar:

$ gcc fonte.c

ou

$ cc fonte.c

que evitará esse inconveniente.

Na maioria dos computadores, isso gerará um arquivo chamado "a.out", para evitar isso você pode utilizar a opção -o, assim fica:

gcc -o destino fonte.c

O seu programa se chamará destino e será o derivado do fonte chamado fonte.c.

Erros
Erros são provocados sempre pelo programador. Existem basicamente dois tipos de erros:Lógico e de Sintaxe

Os erros de sintaxe são os melhores que podem acontecer. Você é capaz de identificá-lo durante a compilação do programa. Ou seja, não existe um efeito desagradável na execução do programa, ele não pode fazer algo que seja impossível ou não determinado previamente na linguagem (==gramática).

Em geral, quando os compiladores encontram um erro não terminam imediatamente, mas continuam procurando e ao final do programa mostram indicativamente onde os erros se encontram e do que se tratam. É a mesma coisa que uma correção ortográfica, você nunca pode falar nada errado ortograficamente nem gramaticalmente, o compilador não deixa.

É bastante traumatizante para alguém, fazendo seu primeiro programa, obter um erro e ver diversas linhas de erro e avisos "estranhos". Não se assuste nem se desmotive, pode ser um simples ponto e vírgula ou um detalhe bobo. Com o tempo e a experiência você começará a se acostumar e aprender a lidar com isso.

Caso não tenha erros de escrita, o compilador transformará o seu código fonte (texto puro) em código de maquina (os tais 0's e 1's, o que a máquina entende) e você poderá executa-lo. Bem, e se a lógica do programa estiver errada? Este tipo de erro não pode ser detectado pelo compilador.

É como se você falasse todas as coisas certas, desse todas as ordens entedíveis para um empregado seu por exemplo porem com inconsistência de dados.

Exemplificando hipoteticamente, você pode falar com seu empregado e ele não entender o que você está expressando e assim ele não conseguirá executar a tarefa e reclamará. Por exemplo, falando em japonês com ele! (erro sintático). Você explica tudo certo para o seu empregado, ele entende tudo porém a explicação é inconsistente. Por exemplo, manda ele ir para uma rua que não existe ou comprar algo que não existe (erro de lógica).

Tais erros podem acarretar algumas conseqüências graves como o programa terminar repentinamente ou o programa funcionar incorretamente e gere dados inconsistentes

Alguns detalhes interessantes para você que está começando a programar, por exemplo, caso você tenha algum erro e conserte-o você é obrigado a compilar o programa novamente para que este tenha efeito, caso contrário o executável não reflitirá o atual código fonte, essa conversão não é automática.

Outro detalhe importante, o C, como tudo no mundo Linux/UNIX, difere letras maiúsculas e minúsculas (case sensitive em inglês). Ou seja, você tem que obedecer esse critério e atentar-se a isso. O comum é colocar tudo em minúsculas, com exceção das strings que ficam a gosto do programador.

Outra coisa importante, o C (como a maioria das linguagens atuais) exige que se faça uma listagem de todas as variáveis do programa previamente. Ou seja, não existe uso dinâmico de variáveis e tudo que você usa tem que ser previamente declarado.

É como na construção de um prédio, todo material (tijolos, cimento, madeira) tem que ser calculado e comprado antes pois na hora que você precisa usar um tijolo, você não fala, quero um tijolo e ele aparece na sua mão.

Exercício I
Algumas perguntas básicas que você deveria responder depois a primeira e segunda postagem sobre C Básico.

A linguagem C é alto ou baixo nível? Qual a relação de C com outras linguagens de programação nesses termos?

Qual a filosofia da linguagem estruturada? Qual a vantagem? Exemplifique.

A linguagem C é compilada ou interpretada? Qual diferença? Qual é melhor?

O que é um compilador?

Como um programa C roda?

Como se compila um programa em C?

As letras maiúsculas e minúsculas são diferenciadas?

Quais os tipos de erros que existem em C e qual é o preferível ?

Nenhum comentário:

Postar um comentário