Académique Documents
Professionnel Documents
Culture Documents
funções em linha
remoção de restrições sobre a localização da declaração de variáveis (como em C++)
adição de vários tipos de dados novos, incluindo o long long int (para minimizar problemas na
transição de 32-bits para 64-bits), um tipo de dados boolean explicito (chamado _Bool) e um
tipo complex que representa números complexos
vetores de dados de comprimento variável (o vetor pode ter um tamanho diferente a cada
execução de uma função, mas não cresce depois de criado)
suporte oficial para comentários de uma linha iniciados por //, emprestados da linguagem C++
várias funções de biblioteca novas, tais como snprintf()
vários ficheiros-cabeçalho novos, tais como stdint.h
O interesse em suportar as características novas de C99 parece depender muito das entidades. Apesar
do GCC e vários outros compiladores suportarem grande parte das novas características do C99, os
compiladores mantidos pela Microsoft e pela Borland suportam pouquíssimos recursos do C99, e estas
duas companhias não parecem estar muito interessadas em adicionar tais funcionalidades, ignorando
por completo as normas internacionais. A Microsoft parece preferir dar mais ênfase ao C++.
Visão Geral
C é uma linguagem imperativa e procedural, para implementação de sistemas. Seus pontos de design
foram para ele ser compilado, fornecendo acesso de baixo nível à memória e baixos requerimentos do
hardware. Também foi desenvolvido para ser uma linguagem de alto nível, para maior
reaproveitamento do código. C foi útil para muitas aplicações que forma codificadas originalmente em
Assembly.
Essa propriedade não foi acidental; a linguagem C foi criada com o objectivo principal em mente:
facilitar a criação de programas extensos com menos erros, recorrendo ao paradigma da programação
algorítmica ou procedimental, mas sobrecarregando menos o autor do compilador, cujo trabalho
complica-se ao ter de realizar as características complexas da linguagem. Para este fim, a linguagem C
possui as seguintes características:
Uma linguagem nuclear extremamente simples, com funcionalidades não-essenciais, tais como
funções matemáticas ou manuseamento de ficheiros (arquivos), fornecida por um conjunto de
bibliotecas de rotinas padronizada;
A focalização no paradigma de programação procedimental;
Um sistema de tipos simples que evita várias operações que não fazem sentido
Uso de uma linguagem de pré-processamento, o pré-processador de C, para tarefas tais como a
definição de macros e a inclusão de múltiplos ficheiros de código fonte;
Um acesso de baixo-nível à memória do computador, através do uso de ponteiros;
Parâmetros que são sempre passados por valor para as funções e nunca por referência (É
possível simular a passagem por referência com o uso de ponteiros);
Definição do alcance lexical de variáveis;
Estruturas de variáveis, (structs), que permitem que dados relacionados sejam combinados e
manipulados como um todo.
Algumas características úteis, que faltam em C, podem ser encontradas em outras linguagens, que
incluem:
Segurança de tipo;
Coletor de lixo (mais encontrado em linguagens interpretadas);
Vetores que crescem automaticamete;
Classes ou objectos com comportamento (ver orientação a objetos);
Um sistema avançado de sistema de tipos;
Closures;
Funções aninhadas;
Programação genérica;
Sobrecarga de operadores;
Meta-programação;
Apoio nativo de multithreading e comunicação por rede.
Apesar da lista de características úteis que C não possui ser longa, isso não tem sido um impedimento
à sua aceitação, pois isso permite que novos compiladores de C sejam escritos rapidamente para
novas plataformas, e também permite que o programador permaneça sempre em controle do que o
programa está a fazer. Isto é o que por várias vezes permite o código de C correr de uma forma mais
eficiente que muitas outras linguagens. Tipicamente, só código de assembly "afinado à mão" é que
corre mais rapidamente, pois possui um controle completo da máquina, mas avanços na área de
compiladores juntamente com uma nova complexidade nos processadores modernos permitiram que a
diferença tenha sido rapidamente eliminada. Uma consequência da aceitação geral da linguagem C é
que frequentemente os compiladores, bibliotecas e até intérpretes de outras linguagens de nível maior
sejam eles próprios implementados em C.
Introdução - C++
História
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs
durante a década de 1980 com o objectivo de melhorar a linguagem de
programação C ainda que mantendo máxima compatibilidade.
Stroustrup percebeu que a linguagem Simula possuía características
bastante úteis para o desenvolvimento de software, mas era muito lenta
para uso prático. Por outro lado, a linguagem BCPL era rápida, mas
possuía demasiado baixo nível, dificultando sua utilização em
desenvolvimento de aplicações. Durante seu período na Bell Labs, ele
enfrentou o problema de analisar o kernel UNIX com respeito à
computação distribuída. A partir de sua experiência de doutorado,
começou a acrescentar elementos do Simula no C. O C foi escolhido
como base de desenvolvimento da nova linguagem pois possuía uma proposta de uso genérico, era
rápido e também portável para diversas plataformas. Algumas outras linguagens que também serviram
de inspiração para o cientista da computação foram ALGOL 68, Ada, CLU e ML.
Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Novas características
foram adicionadas, como funções virtuais, sobrecarga de operadores e funções, referências,
constantes, gerenciamento manual de memória, melhorias na verificação de tipo de dado e estilo de
comentário de código de uma linha (//). Em 1985 foi lançada a primeira edição do livro The C++
Programming Language, contendo referências para a utilização da linguagem, já que ainda não era
uma norma oficial. A primeira versão comercial foi lançada em outubro do mesmo ano. Em 1989 a
segunda versão foi lançada, contendo novas características como herança múltipla, classes abstratas,
métodos estáticos, métodos constantes e membros protegidos, incrementando o suporte a orientação
a objeto. Em 1990 foi lançado o livro The Annotated C++ Reference Manual, que tornou-se base para
o futuro padrão. Outras adições na linguagem incluem templates, tratamento de exceções, espaço de
nomes, conversão segura de tipo de dado e o tipo booleano.
Assim como a linguagem, sua biblioteca padrão também sofreu melhorias ao longo do tempo. Sua
primeira adição foi a biblioteca de E/S, e posteriormente a Standard Template Library (STL); ambas
tornaram-se algumas das principais funcionalidades que distanciaram a linguagem em relação a C.
Criada primordialmente na HP por Alexander Stepanov no início da década de 1990 para explorar os
potenciais da programação genérica, a STL foi apresentada a um comitê unificado ANSI e ISO em 1993
à convite de Andrew Koenig. Após uma proposta formal na reunião do ano seguinte, a biblioteca
recebe o aval do comitê.
Depois de anos de trabalho, o mesmo comitê ANSI/ISO padronizou o C++ em 1998 (ISO/IEC
14882:1998). Após alguns anos foram reportados defeitos e imprecisões no documento, e uma
correção foi lançada em 2003.
Por muito tempo, o C++ foi encarado como um superconjunto do C (uma discussão sobre o tema
encontra-se abaixo na seção de incompatibilidades). Entretanto, em 1999 o novo padrão ISO para a
linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas
incompatibilidades, muitas empresas que desenvolvem compiladores não oferecem suporte à versão
mais recente da linguagem C.
Pode-se dizer que C++ foi a única linguagem entre tantas outras que obteve sucesso como uma
sucessora à linguagem C, inclusive servindo de inspiração para outras linguagens como Java, a IDL de
CORBA e C#.
O nome C++
Durante sua fase inicial de desenvolvimento, a linguagem era chamada "novo C" ou ainda "C com
classes". O termo "C++" é creditado a Rick Mascitti[6], e foi utilizado pela primeira vez em dezembro
de 1983. Ele é uma referência ao operador de incremento ++, significando um acréscimo (uma
evolução) à linguagem C. Em tom humorado, desenvolvedores software e especialistas em informática
no início da década de 1990 costumavam relacionar o ++ do nome à grande insistência dos
programadores em utilizar o C++ da mesma forma que a linguagem C, não usufruindo das novas
facilidades que a linguagem poderia fornecer. Assim como o ++ estava sendo aplicado de maneira
pós-fixa à letra C, a linguagem C++ era uma evolução do C pós-fixada, que só tornar-se-ia realidade
em algum futuro remoto, não naquele momento.
Vantagens e Desvantagens
Vantagens
Desvantagens
Pessoas Notáveis
O desenvolvimento da linguagem C++ é fruto do trabalho de milhares de pessoas associadas à
academia e à indústria de software, e pode consistir na utilização da linguagem, em seu ensino, na
construção de bibliotecas de rotinas ou na participação no comitê de padronização, entre outras
atividades. Algumas pessoas tiveram participação fundamental durante a história para o
desenvolvimento[26]. Primeiramente, o próprio Bjarne Stroustrup, criador da linguagem e de seu
primeiro compilador. O cientista ainda participa na padronização e divulga o C++ no meio acadêmico.
Andrew Koenig é outro pesquisador notável, bastante atuante na padronização e creditado pela técnica
Koenig lookup, demonstrada acima. Já Scott Meyers é um doutor em ciência da computação, e escritor
de diversos livros sobre o desenvolvimento de software utilizando a linguagem. Assim como Meyers,
Herb Sutter é escritor de diversos livros sobre C++ e centenas de colunas e artigos, e um notável
pesquisador sobre programação concorrente e multitarefa. Andrei Alexandrescu é considerado um dos
maiores especialistas em programação C++ avançada. Na área de programação genérica destaca-se o
programador russo Alexander Stepanov, a figura chave na criação da Standard Template Library.
Primeiro Programa em C
Este é um programa muito famoso por ser o citado na primeira edição do primeiro livro de Ken
Thompson e Dennis Ritchie, The C Programming Language.
01.//O primeiro programa em C
02./*Adaptado do programa original do livro The C Programming Language
03.de autoria de Ken Thompson e Dennis Ritchie*/
04.
05.#include <stdio.h>
06.
07.int main (void){
08.printf ("Ola! Mundo.");
09.return (0);
10.}
A finalidade deste programa é apenas mostrar na tela uma mensagem dizendo Ola! Mundo. e terminar
o programa.
A primeira vista parece um programa fútil, mas K&R pretendiam com isso mostrar ao mundo uma
linguagem inovadora, que era mais produtiva e funcional, capaz de substituir as linguagens da época
como por exemplo o Assembly e o B (criado pelo próprio Ken Thompson).
Já com esse programa são apresentadas as noções mais básicas sobre a gramática e sintaxe principal
da linguagem que vamos analisar na próxima página.
Os blocos de dados são utilizados para determinar todas as linhas de código que comandos ou funções
devem executar de uma vez.
O bloco de dados é determinado pelo abrir e fechar de chaves ({}).
Você abre chaves onde se deve começar a executar e fecha onde deve terminar a execução. Em um
programa pode haver mais de uma chave e o mesmo número de chaves aberta deve ser o de chaves
fechadas.
No caso do primeiro programa, apenas abre a execução da função principal (main) e fecha-se no final
de sua execução.
Funções e Processos
1.printf ("Olá! Mundo.");
2.return (0);
Qualquer programa é determinado pelo que está dentro das chaves.
O que está dentro das chaves pode ser uma função, uma palavra reservada (como IF, ELSE, FOR, ...)
ou processo (operação matemática).
Em C, toda chamada de função, processo ou algumas palavras reservadas devem terminar a linha com
um ponto e vírgula (;).
Como você pode ver na chamada da função printf e da palavra reservada return.
Toda a parte de função, processo e palavras reservadas serão tratadas de forma mais abrangente
posteriormente.
Até aqui é o básico de qualquer programação baseada em C. A princípio parece muita coisa, mas,
relativamente, não é. Pois com o tempo, você irá se acostumar a declarar a função INT MAIN (VOID),
pois todo programa precisa dela, e de tanto o compilador indicar uma linha errada, você nunca mais
vai esquecer de que o único erro daquela linha foi a falta do ponto e vírgula no final. E se você não é
bom em matemática, não se preocupe! Pois muitos bons programadores nunca fizeram uma faculdade
de ciências exatas com ênfase em matemática.
Include e as Bibliotecas
Como já vimos, a linguagem C tem a capacidade de importar bibliotecas.
A importância da biblioteca em C é imensa, pois ela nos poupa de muita programação. Uma vez que a
função já está pronta dentro da biblioteca, basta importar tal biblioteca e utilizar a função que
queremos.
Por exemplo, se você quiser mostrar uma mensagem na tela, você não tem que produzir uma função
inteira ou criar um comando novo, basta importar uma biblioteca de I/O (entrada e saída) e utilizar
uma função dela. Quando for compilar, o compilador vai buscar nas bibliotecas tais funções para saber
como utilizá-las.
O papel do pré-processamento é indicar, antes mesmo de compilar, os parâmetros necessários para
ser criado o arquivo executável.
O pré-processamento é indicado pelo caracter sharp (#) no inicio da linha e deve ser usado no início
da programação.
Importando uma biblioteca
A importação de uma biblioteca é dada pelo comando INCLUDE (incluir) seguido da biblioteca entre os
sinais de menor (<) e maior (>).
Porém, devemos notar que existem diferenças entre a importação de bibliotecas de C e de C++.
Importando uma biblioteca em C
Em C, a importação de bibliotecas são mais simples, bastando acrescentar para cada biblioteca um
include em uma linha diferente e o nome da biblioteca seguido de ponto H (.h) - .h é a extensão do
arquivo da biblioteca que vem da palavra inglesa HEADER (cabeçalho) - se você esquecer de colocá-lo
o programa não será compilado.
No exemplo abaixo, vamos incluir duas bibliotecas padrões de C.
1.#include <stdio.h>
2.#include <stdlib.h>
Como podem ver, cada biblioteca foi incluída em uma linha.
Importando uma biblioteca em C++
Em C++, a importação de bibliotecas é um pouco diferente. O comando de importação continua sendo
o include, mas nesse caso, não usaremos o ponto H (.h) no final das bibliotecas legitimamente* de
C++.
*Muitos compiladores aceitam formas híbridas de inclusão de bibliotecas, podendo misturar bibliotecas
de C e de C++. Veremos um exemplo mais a frente.
Após importarmos uma biblioteca por linha, no final dessa lista devemos demonstrar que tipo de
funções usaremos. Na grande maioria dos casos usaremos as funções padrões de cada bibloteca.
Podemos fazer isso facilmente digitando a palavra reservada USING* indicando o espaço de nome
(namespace) standard (std), que quer dizer padrão em inglês.
Não se esqueça que a palavra reservada USING necessita terminar a linha com ponto e vírgula(;).
Abaixo importaremos uma biblioteca padrão de entrada e saída de C++.
1.#include <iostream>
2.using namespace std;
No exemplo abaixo uma importação híbrida de bibliotecas de C e C++.
1.#include <stdlib.h>
2.//biblioteca de C
3.#include <iostream>
4.//biblioteca de C++
5.using namespace std;
As bibliotecas de C são diferentes das bibliotecas de C++. Apesar de muitos compiladores de C++
suportarem as bibliotecas de C, nenhum compilador exclusivamente de C suporta bibliotecas de C++.
Variáveis
Variáveis são endereços de mémoria na qual podemos atribuir ou mudar o valor.
A declaração da variável deve proceder da seguinte maneira:
1º especificar o tipo de variável
2º nomear a variável
* Não podemos esquecer que o C / C++ é case sensitive, ou seja, ele diferencia as letras maiúsculas
das minúsculas.
Por exemplo, x não é a mesma coisa de X.
Um outro cuidado que devemos ter é não começar uma variável por número, mas podemos terminá-la.
Exemplo: É errado declarar 2x, mas podemos declarar x2 ou _2x.
Como uma última precaução, não podemos usar espaços, pois o compilador pode entender como
sendo outra váriavel não separada por vírgula e acusará um erro. No lugar do espaço, pode-se usar
underline (_).
Exemplo: É errado digitar resultado da raiz, mas é correto, resultado_da_raiz.
Tipos de variáveis
A linguagem C aceita os tipos mais comuns de variáveis e com possibilidade de modificar o alcance.
Para saber a diferença entre os tipos de dados consulte a seção algoritmo no link Tipo de dados
comuns.
O primeiro tipo é o inteiro. Declara-se como int nomedavariável.
O tipo inteiro em C/C++ é uma variável de 16 bits (2 btyes) e tem o alcance entre -32768 a +32767.
O segundo é o inteiro longo. Declara-se como long int nomedavariável.
Ele é uma melhoria do inteiro comum, pois dobra o número de bits aumentado considerávelmente seu
alcance, que aqui fica entre -2147483648 a +2147483647.
O outro tipo é o real ou decimal, que também chamamos de ponto flutuante.
Declara-se como float nomedavariável.
O tipo flutuante é uma variável que tem uma precisão de 7 digitos, consome 4 bytes de memória
assim como o inteiro longo e tem um alcance de 1E-36 a 1E+36
Mais um tipo é uma melhoria do ponto flutuante, o dobro. Declaramos double nomedavariável.
O double consome incríveis 8 bytes de memória para o seu armazenamento. Esse consumo é explicado
pela alta precisão de seu número (cerca de 14 dígitos após a vírgula) e tem um alcance imenso que vai
de 1E-303 a 1E+303.
Se você não conhece número científico, isso seria como se depois do número 1 tivessem mais uma
seqüência de 303 números zeros, nem sei se existe uma palavra que descreva tamanho número.
O último tipo, e talvez o mais complexo, é o caracter. O caracter serve tanto para descrever um
símbolo como também pode retornar um inteiro, pois ele baseia-se na tabela ASCII. Ou seja, se
declararmos uma variável de caracter podemos fazer tanto mostrar na saída a letra A como também
65, seu número da tabela ASCII.
Declaramos como char nomedavariável. Apesar de letras consumirem 1 byte teoricamente, os
caracteres em C/C++ são baseados, como já foi dito, na tabela ASCII, onde cada letra tem 2 bytes.
Isso foi necessário para que conseguissemos usar letras de linguagens latinas que contém acentos.
Seu total é 256 divididos em dois: 127 positivos, onde praticamente estão todas as letras necessárias;
e 128 negativos onde encontramos muitos símbolos matemáticos e letras acentuadas. Trataremos
melhor a questão de caracteres, tabela ASCII e corrente de caracteres (string) em páginas adiante.