De Objective Caml para C e C++/Introdução: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
m De Objective Caml para C e C/Índice/Introdução movido para De Objective Caml para C e C++/Introdução
Sem resumo de edição
Linha 12:
 
* Execução: O código é compilado em linguagem nativa da plataforma e só pode ser executado naquela plataforma.
 
===Um primeiro programa em C++===
 
Esse primeiro exemplo vai ilustrar passo a passo como as diferentes fases de programação.
 
Para começar, devemos 'criar um programa'. Abre então um editor de texto e cria um novo documento. Inclui o seguinte texto no documento
 
#include <iostream>
int main ()
{
std::cout << "ola.\n"
return 0
}
 
Guarda o conteúdo do documento em um arquivo, por exemplo chamado <tt>exemplo1.cpp</tt>. Temos então nosso primeiro programa em C++! O que faz? Discutiremos isso depois, pois vamos partir logo para a segunda fase, que é a de 'compilação'.
 
Para isso, devemos utilizar o compilador C++. Podemos fazer isso através de um console de comandos. Abra então um console de comandos e digite o seguinte comando para compilar o arquivo:
 
g++ -ansi -Wall exemplo1.cpp
 
Esse comando é composto pelo nome do compilador (<tt>g++</tt>), duas opções (<tt>-ansi</tt> e
<tt>-Wall</tt>) e o nome do arquivo a ser compilado. A opção <tt>-ansi</tt> instrui o compilador a verificar que você está seguindo as recomendações do padrão ANSI da linguagem C++. Isso garante a portabilidade de seu código. A opção <tt>-Wall</tt> é ainda mais importante, pois ela instrui o compilador a reportar avisos sobre erros possíveis no seu programa. A experiência prova que 99% dos
erros possíveis são erros de fatos. Vale então la pena utilizar esse recurso para descobrir (pelo menos parte dos) erros que inevitavelmente são cometidos pelos programadores: 'errare humanum est'.
 
Deve aparecer a seguinte mensagem no console:
exemplo1.cpp: In function 'int main()':
exemplo1.cpp:6: error: expected `;' before '}' token
 
O compilador indica que na função <tt>int main()</tt>, há um erro, localizado na linha 6 (pode ser que você tenha introduzido linhas adicionais no seu editor, neste caso o número da linha onde ocorre esse erro poderá ser diferente).
 
O que aconteceu? Bom, a mensagem de erro é bastante clara: o compilador estava esperando o caractere <tt>;</tt> antes do <tt>}</tt>. E o compilador está certíssimo, esquecemos de colocar um ponto e vírgula no final da linha 5 e quando encontrou <tt>}</tt> o compilador reparou essa falta! Corrija então esse erro no seu editor, salve novamente no arquivo e repete o comando de compilação.
 
Agora não há mais erro detectado pelo compilador. Vamos então executar o nosso programa... Mas onde está ele? Lista o conteúdo do diretório atual (o comando <tt>ls</tt> permite fazer isto) e observará a presença de um programa chamado <tt>a.out</tt>. Ao menos que seja instruído de outra forma, o compilador gera um programa em um arquivo com esse nome esquisito. Para gerar o programa com um outro nome, deve se utilizar uma opção específica do compilador, que é <tt>-o</tt> seguido do nome desejado. Por exemplo, se desejarmos chamar esse programa de <tt>exemplo1</tt>, o comando seria:
 
g++ -ansi -Wall exemplo1.cpp -o exemplo1
 
Para executar o programa, basta digitar no console o caminho até o arquivo que contem esse programa, por exemplo:
./exemplo1
 
Aparece então a seguinte mensagem:
ola.
 
Ufa!... Escrevemos o nosso primeiro programa em C++, e vimos como compilá-lo. Aprendemos três opções muito úteis do compilador g++, e verificamos que o compilador tem um papel importante para apoiar o desenvolvimento de programas corretos através da emissão de mensagens de erro e de avisos.
 
Para terminar essa introdução, precisamos ainda explicar como esse programa funciona. No processo começaremos a aprender algumas coisas da linguagem C++. Então, o que faz esse programa? Vamos incluí-lo novamente, dessa vez identificando as linhas com números:
 
1 #include <iostream>
2 int main ()
3 {
4 std::cout << "ola.\n";
5 return 0;
6 }
 
Nós não vamos entrar muito em detalhes aqui. A linha 1 faz referência a um arquivo chamado <tt>iostream</tt> que faz parte da biblioteca padrão do C++ e contém declarações de tipos e funções relacionadas com fluxos de entrada e saída (<tt>iostream<tt> abrevia <tt>input/output stream</tt>). Todas as linhas iniciando com o caractere <tt>#</tt> ('jogo da velha') são 'diretivas de pré-processamento'. Antes da fase de compilação iniciar, existe uma fase dita de pré-processamento que realiza diversas operações de manipulação do código fonte como a inclusão de arquivos (é o caso da diretiva <tt>#include</tt>), ou a definição de 'macro' (através da diretiva <tt>#define</tt>), que nada mais são que abreviações para expressões.
 
As linhas 2 a 6 contém a definição de uma função, cujo nome é <tt>main</tt>. Antes do nome da função vem o tipo do resultado da mesma: aqui é o tipo <tt>int</tt> que corresponde a números inteiros. Depois do nome da função, vem uma lista de parâmetros entre parênteses. Aqui a lista é vazia e não há parâmetros. Depois da lista de parâmetros, vem o corpo da função, entre chaves. O corpo dessa função é uma seqüência composta de dois comandos (ou instruções). O primeiro comando (linha 4) envia o texto <tt>"ola.\n"</tt> no fluxo de saída cujo nome é <tt>std::cout</tt>, que é a saída padrão. O segundo comando indica que a função retorna o valor 0.
 
Vale salientar que as linguagens C e C++ tem como convenção que a execução de um programa sempre inicia com a chamada de uma função <tt>main</tt>. Portanto, quando irá desenvolver um programa nessas linguagens, sempre deverá definir uma função com esse nome, que será o ponto de partida inicial desse programa. O valor que retorna o programa é comunicado ao sistema operacional e pode ser usado para informar da ocorrência ou não de algum problema (por convenção, o valor 0 indica uma execução bem-sucedida).
 
===Um primeiro programa em C===
 
O programa C seguinte é equivalente ao programa C++ dado em exemplo no parágrafo anterior.
#include <stdio.h>
int main ()
{
fprintf(stdout, "ola.\n")
return 0;
}
Para experimentar a programação em C, abre um editor de texto, cópia o código dado e grave o mesmo em um arquivo chamado <tt>exemplo2.c</tt>. Para compilar esse arquivo e gerar um programa executável nomeado <tt>exemplo2</tt>, entre com o seguinte comando no console:
gcc -ansi -Wall exemplo2.c -o exemplo2
 
Então quais são as diferenças com o programa C++? Basicamente, são reduzidas ao uso de funções diferentes para realizar a impressão da mensagem <tt>ola.</tt> na saída padrão. Em C, utiliza-se uma função nomeada <tt>printf</tt> que é disponibilizada na biblioteca padrão através do arquivo <tt>stdio.h</tt>. Observe a similaridade com o comando <tt>Printf.printf</tt> da linguagem Objective Caml: o primeiro argumento é o fluxo de saída (<tt>stdout</tt> designa a saída padrão em C), e o segundo argumento é um texto a ser impresso. Em Objective Caml, como em C, esse texto pode ter diretivas de formatação de valores que são então passados como argumentos adicionais à função <tt>fprintf</tt>.