Revista Do Linux  
EDIÇÃO DO MÊS
 Programação
 CD do mês
 Corporativo
 Entrevista
 Capa
 Estudo de Caso
 Produto
 Distro
 Flagship
 Interbase
 Gerenciadores
 RPM
 Wine
 XML
 

Curso de Linguagem C
C é a linguagem hegemônica nos ambientes profissionais de desenvolvimento e a mais utilizada em Linux

Sejam bem-vindos ao nosso curso de linguagem C. Nesta série de artigos, pretendemos apresentar, numa seqüência didática, desde os conceitos básicos da linguagem até os mais avançados, como ponteiros e as diversas formas de entrada e saída de dados.

Os artigos pressupõem que o leitor tenha conhecimentos básicos de computação e lógica, além de saber, conceitualmente, o que são código-fonte, código-objeto, executáveis e qual a finalidade de um compilador.

Vamos começar com um pequeno histórico e depois passaremos a um programa exemplo que apresenta vários conceitos da linguagem.

A origem do C

A linguagem C foi criada pela Bell Labs, divisão da AT&T, a famosa companhia americana de telecomunicações. Você já deve ter ouvido falar que o Unix, sistema operacional que Linus Torvalds utilizou como modelo ao criar o Linux, foi desenvolvido nesses mesmos laboratórios. Pois bem, a linguagem C foi criada justamente para servir ao desenvolvimento dos programas do Unix  daí a associação que sempre se faz. Assim, se algum fã da Microsoft insistir em afirmar que Bill Gates inventou o C (vamos chamá-la assim daqui em diante), desminta-o veementemente!

O C foi criado em 1969 por Dennis Ritchie, que também é um dos principais criadores do Unix. Seu propósito era gerar uma linguagem de alto nível, em oposição à linguagem de máquina (Assembly), conhecida como de baixo nível. O C é uma linguagem para uso geral, ou seja, desenvolvimento dos mais diversos tipos de aplicação. Tem como características a modularidade e a portabilidade, contendo um número pequeno de comandos.

Maiores detalhes sobre a história do C podem ser obtidos em vários sites da Internet. Destacamos o documento em que Dennis Ritchie descreve o desenvolvimento e detalhes de implementação no site: cm.bell-labs.com/cm/cs/who/dmr.crist.html

Hello, World!

Provavelmente, entre os fãs do C o programa "Hello, World!" seja o mais conhecido, e é o primeiro programa exemplo do livro oficial que descreve a linguagem, The C Programming Language, de Brian W. Kernighan e Dennis C. Ritchie (ele de novo). Tanto o texto original quanto a sua versão em português (C, A Linguagem de Programação) são leituras recomendadas, embora um pouco difíceis para os programadores iniciantes.

Vamos utilizar esse programa para apresentar uma série de conceitos do C. Use o editor de sua preferência e digite as seguintes linhas:

Grave-o com o nome "hello.c" e vamos gerar o executável. No prompt do Linux, digite:

$ gcc hello.c -o hello

Se tudo estiver certo, você deve ter gerado um arquivo chamado "hello". Para executá-lo, basta digitar:

$ ./hello

E você irá obter como saída:

Hello, World!

Conceitos Básicos

Vamos estudar o programa linha a linha e apresentar alguns conceitos básicos. A primeira linha contém:

#include <stdio.h>

Em C, toda palavra iniciada pelo caractere "#" é chamada de diretiva. Essas palavras são comandos para o compilador, que não fazem parte do arquivo executável final, mas são necessários para a sua geração. No exemplo, apresentamos uma das diretivas mais utilizadas em programas C, a include. Ela instrui ao compilador para processar o arquivo stdio.h antes de iniciar o programa Hello. Os arquivos com a terminação .h são denominados arquivos de inclusão, ou simplesmente includes, e contêm informações que devem ser tratadas pelo compilador para que seja possível a geração do executável. No exemplo, estamos utilizando o include stdio.h, que contém informações referentes à entrada e saída de informações. Essas informações são necessárias para que a função printf, que veremos daqui a pouco, possa funcionar.

Em seguida, temos a linha:

$ main(int argc, char *argv[])

Toda palavra seguida de um abre-parêntese está referenciando uma função do C. Funções são estruturas básicas de um programa, o equivalente às sub-rotinas. Qualquer programa C deve ter uma função principal, denominada main, que contém a rotina principal do programa.

Nessa linha, estamos declarando uma função, ou seja, definindo seu nome e mostrando os comandos que a compõem. Repare que o comando termina com o fecha-parênteses: ). Iremos discutir o conteúdo entre parênteses logo a seguir, quando apresentarmos os conceitos de argumentos.

Como estamos declarando a função antes de apresentarmos seus comandos, devemos indicar seu início com o caractere abre-chaves: {.

A próxima linha contém:

printf("Hello, world!\n");

printf, assim como main, é uma função, mas em vez de estarmos declarando-a, estamos, nesse caso, evocando ou chamando, a função. Isso quer dizer que estamos orientando ao compilador que execute o código dessa função.

Você deve estar perguntando onde estão os comandos que fazem parte dessa função. Nós não os colocamos pelo fato de ela fazer parte da biblioteca padrão C. Essa biblioteca nada mais é que um conjunto de funções de utilização freqüente, que já é fornecido em formato de código-objeto. Ela é chamada de padrão por ser utilizada em qualquer implementação da linguagem, não importando o compilador ou máquina.

Entre parênteses temos o argumento da função. Argumentos são dados fornecidos à função, que os utilizará em seu processamento. Lembra da declaração da função main? Lá descrevemos quais os tipos de argumento que a função usa, no caso um número inteiro (int) e um vetor de ponteiros de strings (char *[]). Não se assuste, iremos apresentar esses conceitos nos próximos artigos!

Por enquanto, basta saber que os caracteres entre aspas (") definem o que chamamos de cadeias de caracteres ou, em inglês, strings. Dessa forma, estamos passando para a função printf a cadeia de caracteres "Hello, world!\n". Os dois caracteres finais (\n) são os chamados caracteres "escapados" ou escaped characters. Dentro de uma cadeia, quando utilizamos o caracter "\", estamos indicando que o caractere a seguir não é imprimível, e sim uma indicação de controle. No caso, o "n" indica que, após imprimir a cadeia, o programa deve pular para a próxima linha. Experimente gerar o programa sem "\n" e veja a diferença.

Repare que, como estamos chamando uma função, a linha termina com ponto-e-vírgula (;), o que não ocorre na declaração. Em C, toda chamada de função deve terminar com ponto-e-vírgula.

Apontamos agora o final dos comandos da função através do caractere fecha-chave: }. No caso, como a função é a main, estamos também indicando o fim do programa.

Compilação e Link-edição

Para finalizar, vamos comentar o comando que utilizamos para gerar o executável:

$ gcc hello.c -o hello

O comando gcc é a chamada do compilador C. No caso do Linux, o compilador geralmente utilizado é o GNU C, bastante poderoso e, melhor de tudo, gratuito.

A maioria dos compiladores C permite que sejam fornecidos argumentos para link-edição na chamada. Assim, o argumento "-o hello" indica ao link-editor que o código-objeto deve ser linkado com a biblioteca padrão C e que o executável final gerado deve se chamar hello.

Conclusão

Introduzimos neste artigo a linguagem C com um pequeno histórico. A partir de um programa exemplo bem básico, foram mostrados alguns conceitos básicos, largamente utilizados, e também alguns comentários sobre o compilador e link-editor.

No artigo da próxima edição, você verá os tipos de variáveis utilizados em C e também uma lista completa de comandos com exemplos para você praticar. Até lá!


A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux