Вы находитесь на странице: 1из 14

Histria[editar | editar cdigo-fonte]

Ken Thompson e Dennis Ritchie (da esquerda para direita), os criadores das linguagens B e C,
respectivamente.

O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973.[5] de acordo
com Ritchie, o perodo mais criativo ocorreu em 1972. A linguagem foi chamada "C",
porque suas caractersticas foram obtidas a partir de uma linguagem anteriormente
chamado de " B", que de acordo com a Ken Thompson era verso reduzida da linguagem
de programao BCPL.[6]
A verso original PDP-11 do sistema Unix foi desenvolvido em assembly. Em 1973, com a
adio dos tipos struct , a linguagem C tornou-se poderosa o suficiente para que a maior
parte do kernel do Unix fosse reescrito em C. Este foi um dos primeiros ncleos de
sistemas operacionais implementados numa linguagem diferente da linguagem Assembly.
Em 1977, foram feitas novas mudanas por Ritchie e Stephen C. Johnson para facilitar a
portabilidade do sistema operacional Unix. OPortable C Compiler de Johnson serviu de
base para vrias implementaes de C em novas plataformas.[7]

C K&R[editar | editar cdigo-fonte]


A linguagem C no teve um sucesso imediato aps a sua criao e o seu uso ficou restrito
a alguns laboratrios[8] , mas em 1978 Brian Kernighan e Dennis Ritchie lanam o livro The
C Programming Language.[9] que serviu de tutorial e mudou a histria da programao em
C. De fato essa primeira verso da linguagem conhecida como "C Kernigham e Ritchie"
ou apenas "C K&R".[10]
Esse livro, conhecido pelos programadores de C como "K&R", serviu durante muitos anos
como uma especificao informal da linguagem. A verso da linguagem C que ele
descreve usualmente referida como "K&R C". A segunda edio do livro cobriu o padro
posterior, o ANSI C. K&R C introduziu as seguintes caractersticas na linguagem:

Biblioteca padro de E/S

Tipo de dados struct

Tipo de dados long int

Tipo de dados unsigned int

O operador =+ foi alterado para += , e =- para -= (o analisador lxico do


compilador fazia confuso entre i =+ 10 e i = +10 . O mesmo acontecia com =- )

K&R C frequentemente considerado a parte mais bsica da linguagem, cujo suporte


deve ser assegurado por um compilador C. Durante muitos anos, mesmo aps a
introduo do padro ANSI C, K&R C foi considerado o "menor denominador comum", em
que programadores de C se apoiavam quando uma portabilidade mxima era desejada, j
que nem todos os compiladores eram actualizados o bastante para suportar o padro
ANSI C.
Nos anos que se seguiram publicao do K&R C, algumas caractersticas "no-oficiais"
foram adicionadas linguagem, suportadas por compiladores da AT&T e de outros
vendedores. Estas incluam:

Funes void e tipos de dados void *

Funes que retornam tipos struct ou union

Campos de nome struct num espao de nome separado para cada tipo struct

Atribuio a tipos de dados struct

Qualificadores const para criar um objecto s de leitura

Biblioteca padro, que incorpora grande parte da funcionalidade implementada por


vrios vendedores

Enumeraes
Clculos de ponto-flutuante em preciso simples (no K&R C, os clculos
intermedirios eram feitos sempre em double , porque era mais eficiente na mquina
onde a primeira implementao do C foi feita)

Esta pgina ou seco cita fontes confiveis e independentes, mas que no cobrem todo o contedo (desde agosto de 2013
favor, adicione mais referncias e insira-as corretamente no texto ou no rodap. Material sem fontes poder ser removido.
Encontre fontes: Google (notcias, livros e acadmico)

ANSI C e ISO C[editar | editar cdigo-fonte]


Durante os finais da dcada de 1970, a linguagem C comeou a substituir a
linguagem BASIC como a linguagem de programao de microcomputadores mais usada.
Durante adcada de 1980, foi adaptada para uso no PC IBM, e a sua popularidade

comeou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente


com outros nos laboratrios Bell, comeou a trabalhar num projecto onde se adicionavam
extras para programao orientada por objectos linguagem C. A linguagem que eles
produziram, chamada C++, nos dias de hoje a linguagem de programao de aplicaes
mais comum no sistema operativo Windows da companhia Microsoft. A linguagem C
permanece a mais popular no mundo Unix.
Em 1983, o instituto norte-americano de padres (ANSI) formou um comit, X3J11, para
estabelecer uma especificao do padro da linguagem C. Aps um processo longo e
rduo, o padro foi completo em 1989 e ratificado como ANSI X3.159-1989 "Programming
Language C". Esta verso da linguagem frequentemente referida como ANSI C.
Em1990, o padro ANSI C, aps sofrer umas modificaes menores, foi adotado
pela Organizao Internacional para Padronizao (ISO) como ISO/IEC 9899:1990,
tambm conhecido como C89 ou C90. Um dos objetivos do processo de padronizao
ANSI C foi o de produzir um sobreconjunto do K&R C, incorporando muitas das
caractersticas no-oficiais subsequentemente introduzidas. Entretanto, muitos programas
tinham sido escritos e que no compilavam em certas plataformas, ou com um certo
compilador, devido ao uso de bibliotecas de funes no-padro e ao fato de alguns
compiladores no aderirem ao ANSI C.

C99[editar | editar cdigo-fonte]


Aps o processo da padronizao ANSI, as especificaes da linguagem C permaneceram
relativamente estticas por algum tempo, enquanto a linguagem C++ continuou a evoluir.
(em 1995, a Normative Amendment 1 criou uma verso nova da linguagem C mas esta
verso raramente tida em conta.) Contudo, o padro foi submetido a uma reviso nos
finais da dcada de 1990, levando publicao da norma ISO 9899:1999 em 1999. Este
padro geralmente referido como "C99" e foi adoptado como um padro ANSI em maro
de 2000. As novas caractersticas do C99 incluem:

Funes em linha

Remoo de restries sobre a localizao da declarao de variveis (como em


C++)

Adio de vrios tipos de dados novos, incluindo o long long int (para
minimizar problemas na transio de 32-bits para 64-bits), um tipo de dados boolean
explicito (chamado _Bool) e um tipo complex que representa nmeros complexos

Vetores de dados de comprimento varivel (o vetor pode ter um tamanho diferente


a cada execuo de uma funo, mas no cresce depois de criado)

Suporte oficial para comentrios de uma linha iniciados por // , emprestados da


linguagem C++

Vrias funes de biblioteca novas, tais como snprintf()

Vrios ficheiros-cabealho novos, tais como stdint.h

O interesse em suportar as caractersticas novas de C99 parece depender muito das


entidades. Apesar do GCC e vrios outros compiladores suportarem grande parte das
novas caractersticas do C99, os compiladores mantidos pela Microsoft e
pela Borland suportam pouqussimos recursos do C99, e estas duas companhias no
parecem estar muito interessadas em adicionar tais funcionalidades, ignorando por
completo as normas internacionais. A Microsoft parece preferir dar mais nfase ao C++. [11]

C11[editar | editar cdigo-fonte]


Em 2007, se iniciou o trabalho em antecipao de outra reviso do padro de C,
informalmente chamada de C11 ou C1X. O comit dos padres de C adotou regras para
limitar a insero de novos recursos que no tenham ainda sido testados por
implementaes existentes.[12]
Em dezembro de 2011 foi publicada a verso estvel da especificao, como ISO/IEC
9899:2011.

Viso geral[editar | editar cdigo-fonte]


C uma linguagem imperativa e procedural, para implementao de sistemas. Seus
pontos de design foram para ele ser compilado, fornecendo acesso de baixo
nvel memria e baixos requerimentos do hardware. Tambm foi desenvolvido para ser
uma linguagem de alto nvel, para maior reaproveitamento do cdigo. C foi til para muitas
aplicaes que foram codificadas originalmente em Assembly.
Essa propriedade no foi acidental; a linguagem C foi criada com o objectivo principal em
mente: facilitar a criao de programas extensos com menos erros, recorrendo
aoparadigma da programao procedural, mas sobrecarregando menos o autor
do compilador, cujo trabalho complica-se ao ter de realizar as caractersticas complexas da
linguagem. Para este fim, a linguagem C possui as seguintes caractersticas:

Uma linguagem extremamente simples, com funcionalidades no-essenciais, tais


como funes matemticas ou manuseamento de ficheiros (arquivos), fornecida por
um conjunto de bibliotecas de rotinas padronizada

A focalizao no paradigma de programao procedural

Um sistema de tipos simples que evita vrias operaes que no fazem sentido

Uso de uma linguagem de pr-processamento, o pr-processador de C, para


tarefas tais como a definio de macros e a incluso de mltiplos ficheiros de cdigo
fonte

Ponteiros do maior flexibilidade linguagem

Acesso de baixo nvel, atravs de incluses de cdigo Assembly no meio do


programa C

Parmetros que so sempre passados por valor para as funes e nunca por
referncia ( possvel simular a passagem por referncia com o uso de ponteiros)

Definio do alcance lexical de variveis

Estruturas de variveis, (structs), que permitem que dados relacionados sejam


combinados e manipulados como um todo

Algumas caractersticas teis, que faltam em C, podem ser encontradas em outras


linguagens, que incluem:

Segurana de tipo

Coletor de lixo (mais comum em linguagens interpretadas)

Vetores que crescem automaticamete

Classes ou objetos com comportamento (ver Orientao a objetos)

Clausuras

funes aninhadas

Sobrecarga de operadores

Meta-programao

Apoio nativo de multithreading e comunicao por rede

Apesar da lista de caractersticas teis que C possui no ser longa, isso no tem sido um
impedimento sua aceitao, pois isso permite que novos compiladores de C sejam
escritos rapidamente para novas plataformas, e tambm permite que o programador
permanea sempre em controle do que o programa est a fazer. Isto o que por vrias
vezes permite o cdigo de C correr de uma forma mais eficiente que muitas outras
linguagens. Tipicamente, s cdigo de Assembly "afinado mo" que corre mais
rapidamente, pois possui um controle completo da mquina, mas avanos na rea de
compiladores juntamente com uma nova complexidade nos processadores modernos
permitiram que a diferena tenha sido rapidamente eliminada. Uma consequncia da
aceitao geral da linguagem C que frequentemente os compiladores, bibliotecas e at
intrpretes de outras linguagens de nvel maior sejam eles prprios implementados em C.

C tem como ponto forte, a sua eficincia, e a linguagem de programao preferida para o
desenvolvimento de sistemas e softwares de base, apesar de tambm ser usada para
desenvolver programas de computador. tambm muito usada no ensino de cincia da
computao, mesmo no tendo sido projetada para estudantes e apresentando algumas
dificuldades no seu uso. Outra caracterstica importante de C, sua proximidade do cdigo
de mquina, que permite que um projetista seja capaz de fazer algumas previses de
como o software ir se comportar, ao ser executado.
C tem como ponto fraco, a falta de proteo que d ao programador. Praticamente tudo
que se expressa em um programa em C, pode ser executado, como por exemplo, pedir o
vigsimo membro de um vetor com apenas dez membros. Os resultados so muitas vezes
totalmente inesperados, e os erros, difceis de encontrar.

Tipos de dados[editar | editar cdigo-fonte]


C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem ALGOL,
tais como Pascal. Possui tipos para nmeros inteiros de vrios tamanhos com e sem
sinal, nmeros de ponto flutuante, caracteres e estruturas ( struct s). C usa
extensivamente ponteiros, um tipo muito simples de referncia que guarda o endereo de
memria da varivel. O ponteiro pode ser desreferenciado, uma operao que busca o
objecto que se encontra na morada da memria que o ponteiro possui, morada essa que
pode ser manipulada atravs de aritmtica de ponteiros. Durante o tempo de execuo, o
ponteiro simplesmente uma morada de mquina tais como aquelas manipuladas
emAssembly, mas em tempo de compilao possui um tipo complexo que indica o tipo do
objecto para onde ele aponta, permitindo que se verifique o tipo de expresses, incluindo
ponteiros. O tipo "string" (cadeia ou linha de texto) de C simplesmente um ponteiro para
um vetor de caracteres e alocao dinmica de memria, descrita abaixo, efectuada
atravs de ponteiros.
Os ponteiros em C possuem um valor reservado especial, NULL , que indica que no esto
a apontar para uma morada. O uso desse valor como morada muito til na construo de
vrias estruturas de dados, mas causa comportamento no-definido (possivelmente uma
falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL
chamado ponteiro nulo. Os ponteiros so declarados (e desreferenciados) com
um * (asterisco), portanto o tipo int* denota um ponteiro para nmero(s) inteiro(s). A
linguagem C tambm fornece um tipo especial de ponteiros, o void*, que se traduz num
ponteiro que aponta para um objecto de tipo desconhecido.
A linguagem C tambm tem apoio em nvel de linguagem para vetores estticos (de
dimenso fixa) de tipos. As disposies de tipos podem parecer ter mais que uma
dimenso apesar de serem tecnicamente disposies de disposies de tipos. Em
memria, tais estruturas so posicionadas com as linhas uma depois da outra (a
alternativa seria armazenar os dados em colunas, usado em outras linguagens). O acesso
a disposies de tipos feito atravs de ponteiros e aritmtica de ponteiros; o nome da

disposio tratado como se fosse um ponteiro que aponta para o incio da disposio.
Em certas aplicaes no razovel usarem-se disposies de tipos de dimenso fixa e
por isso a alocao dinmica de memria pode ser usada para criar disposies de tipos
de dimenso varivel.
Como a linguagem C regularmente usada em programao de baixo-nvel de sistemas,
h casos em que necessrio tratar um nmero inteiro como sendo um ponteiro, um
nmero de ponto flutuante como sendo um nmero inteiro ou um tipo de ponteiro como
sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem"
(tambm denominado "converso de tipo" ou "casting"), uma operao que, caso seja
possvel, fora a converso de um objecto de um tipo para outro. Apesar de ser por vezes
necessrio, o uso de converses de tipo sacrifica alguma segurana oferecida pelo
sistema de tipos.
int
O tipo de dado int (inteiro) serve para armazenar valores numricos inteiros. Existem
vrios tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema
operacional e/ou arquitetura do processador):

int , pode possuir 16 bits, 32 bits ou 64 bits

short int , deve possuir tamanho de no mnimo 16 bits e no pode ser maior

que int

long int , deve possuir tamanho mnimo de 32 bits

long long int , deve possuir tamanho mnimo de 64 bits

Todos estes tipos de inteiros podem ainda ser declarados precedidos da


clusula unsigned, o que faz com que s suporte nmeros positivos. Isto faz com que, com
o mesmo tamanho, uma varivel suporte mais nmeros positivos do que um signed (todos
os inteiros so signed por omisso).
char
O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que
o programa reserva um espao de 8 bits na memria RAM ou em registradores do
processador para armazenar um valor (char de tamanho maior que 8 bits permitido pela
linguagem, mas os casos so raros). Com vetores do tipo char possvel criarcadeias de
caracteres (strings).
float
O tipo de dado float serve para armazenar nmeros de ponto flutuante, ou seja, com
casas decimais. O padro mais utilizado nos ltimos 10 anos o IEEE 754-1985.
double

O tipo de dado double serve para armazenar nmeros de ponto flutuante de dupla
preciso, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade.
O padro mais adotado tambm o IEEE 754-1985.
struct
Em C podem ser usadas estruturas (chamados de registos em outras linguagens de
programao). As estruturas so grupos de variveis organizadas arbitrriamente pelo
programador. Uma estrutura pode criar um novo tipo de varivel caso typedef seja usado
em sua declarao.

Relaes com C++[editar | editar cdigo-fonte]


A linguagem de programao C++ foi originalmente derivada do C para suportar
programao orientada a objetos. medida que as linguagens C e C++ foram evoluindo
independentemente, a diviso entre as duas veio a aumentar. O padro C99 criou um
nmero de caractersticas que entram em conflito. Hoje, as principais diferenas entre as
duas linguagens so:

inline - em C++, funes em linha encontram-se no espao global enquanto que

em C encontram-se no espao local. Por outras palavras, isso significa que, em C++,
qualquer definio de qualquer funo em linha (sem ser a respeito da sobrecarga de
funes de C++) tem de estar em conformidade com a "regra de uma definio" da
linguagem C++. Mas em C, a mesma funo em linha pode ser definida de maneira
diferente em diferentes arquivos (ou ficheiros)

A palavra-chave bool , igual usada em C++, em C99 necessita que se inclua o


ficheiro-cabealho <stdbool.h> (_Bool est sempre disponvel). Padres anteriores
de C no definiam um tipo booleano e vrios (e incompatveis) mtodos foram usados
para simular um tipo booleano

Algumas caractersticas originalmente desenvolvidas em C++ tambm apareceram em C.


Entre elas encontram-se:

prottipos de funo (com declarao de tipos de parmetros) e remoo do "int"


implcito

comentrios de linha, indicados por // ; comentrios de linha terminam com um


carcter de nova-linha

a palavra-chave inline

tipagem mais forte

Exemplos[editar | editar cdigo-fonte]

Programa Ol Mundo[editar | editar cdigo-fonte]


Ver artigo principal: Programa Ol Mundo
A seguinte aplicao foi publicada na primeira edio de C de K&R, e tornou-se no
programa de introduo padro da maior parte dos livros sobre C. O programa envia o
texto "Ol, Mundo!" para a sada padro, que normalmente o console, mas que tambm
pode ser um ficheiro (ou arquivo), um outro dispositivo qualquer, ou at mesmo um bit
bucket, dependendo de como a sada-padro mapeada na altura em que o programa
executado.
int main(void)
{
puts("Ol, Mundo!");
}

Apesar do programa acima correr corretamente, atualmente origina algumas mensagens


de aviso quando compilado como C ANSI. Essas mensagens podem ser eliminadas
efectuando umas pequenas alteraes no programa original:
# include <stdio.h> /* Pacotes com funes de entrada e sada */
int main(void)
{
puts("Ol, Mundo!");
return 0; /* Retorna 0, pois `main` retorna um `int` */
}
/* Nova linha aps fechar a chave principal */

A primeira linha do programa uma diretiva de pr-processamento #include , que causa


com que o pr-processador substitua aquela linha pela totalidade do contedo do arquivo
qual diretiva se refere. Neste caso o arquivo padro stdio.h (que contm prottipos de
funes para trabalho com entrada e sada) ir substituir a linha. Os
caracteres < e > indicam que o arquivo stdio.h encontra-se no local em que, quando da
configurao do compilador, se definiu como padro para localizao dos ficheiros de
incluso (header files, geralmente com a extenso .h).
A linha (no-vazia) seguinte indica que uma funo denominada main ser definida. A
funo main tem um significado especial nos programas em C, pois a funo que
inicialmente executada (em ingls, entry point). Os caracteres { e } delimitam a extenso
da funo. O termo int define a funo main como sendo uma funo que retorna um
nmero inteiro. O termo void indica que a funo no aceita parmetros. A funo main,
normalmente aceita parmetros, que so passado pela linha de comando. Os

compiladores e sistemas operacionais atuais reconhecem as seguintes declaraes de


main:
int main(void);
int main(int argc, char *argv[]);
int main(int argc, char **argv);

A linha seguinte "chama", ou executa uma funo chamada puts ; o arquivo


includo, stdio.h , contm a informao que descreve a forma como a funo puts deve
ser chamada. Nesta chamada, passado funo printf um nico argumento, a linha
de texto constante "Ol, Mundo!". A funo puts retorna um valor, um int , mas como
no usado, descartado pelo compilador. O comando return retorna o valor 0 para o
sistema, que interpretado pelo mesmo como que a funo main() foi executada e
encerrada com sucesso (sem erros). Por fim, o caracter } indica o fim da funo main .
Note-se que texto rodeado por /* e */ (comentrios de texto) ignorado pelo
compilador. Os compiladores que obedecem norma C99 tambm aceitam como
comentrios as linhas de texto que so precedidos por // .

Matemtica[editar | editar cdigo-fonte]


O seguinte cdigo realiza seis operaes
matemticas, adio, subtrao, multiplicao, diviso, exponenciao e radiciao, e em
seguida envia os seus respectivos resultados para a sada padro (normalmente o
console).
# include <math.h>

// necessria para pow() e sqrt()

# include <stdio.h> // necessria para printf() e getchar()


int main()
{
int a = 2, b = 3;
printf("%d + %d = %d\n", a, b, a + b);
printf("%d - %d = %d\n", a, b, a - b);
printf("%d x %d = %d\n", a, b, a * b);
printf("%d / %d = %0.1f\n", a, b, (float) a / b); // resultado
fracionrio
printf("%d elevado a %d = %0.1f\n", a, b, pow(a, b)); // pow(base,
expoente)
printf("raiz quadrada de %d = %0.1f\n", a, sqrt(a));
getchar(); //O uso dessa funo necessria apenas nos sistemas
Windows, para manter o terminal (Prompt de comando) aberto

return 0;
}

Estruturas de dados[editar | editar cdigo-fonte]


No exemplo seguinte, criada uma estrutura composta por 3 elementos de tipos
diferentes. Aps ser declarada uma varivel "x" do tipo struct "y", onde "y" o nome da
estrutura, para se acessar os elementos usa-se a seguinte sintaxe: x.elemento .
# include <stdio.h>
struct Pessoa
{
char nome[64]; // vetor de 64 chars para o nome
unsigned short int idade;
char rg[13];
};
int main()
{
struct Pessoa exemplo = {"Fulano", 16, "00.000.000-00"}; //
declarao da varivel "exemplo"
printf("Nome: %s\n", exemplo.nome);
printf("Idade: %hu\n", exemplo.idade);
printf("RG: %s\n", exemplo.rg);
getchar(); // desnecessrio, mas comumente utilizado em ambientes
windows para "segurar" o terminal aberto
return 0;
}

Ou, equivalente:
# include <stdio.h>
typedef struct Pessoa
{
char nome[64]; // vetor de 64 chars para o nome
unsigned short int idade;
char rg[13];
} Pessoa;

int main()
{
Pessoa exemplo = {"Felipe", 16, "00.000.000-00"}; // declarao da
varivel "exemplo"
printf("Nome: %s\n", exemplo.nome);
printf("Idade: %hu\n", exemplo.idade);
printf("RG: %s\n", exemplo.rg);
getchar();
return 0;
}

Baixo-nvel[editar | editar cdigo-fonte]


O exemplo que se segue apresenta cdigo C de baixo-nvel, as funes read e write.
Neste programa vamos ler de N para buf, blocos de bufsize neste caso 1024, para O.
Quando n for igual a 0, porque a leitura acabou, sai do ciclo while e libera a memria
ocupada por buf.
# include <unistd.h>
# define bufsize 1024
int main(void)
{
int N,n,O;
char *buf;
buf = (char*) malloc (bufsize);
while(n=read(N, buf, bufsize))
write(O, buf,n);
free(buf);
return 0;
}

Ferramentas de programao[editar | editar cdigo-fonte]

Bloodshed Dev-C++

IDE (Ambiente de desenvolvimento integrado),


como Code::Blocks, NetBeans e JetBrains CLion

GNU Compiler Collection

Automao de compilao, como make

Ver tambm[editar | editar cdigo-fonte]


Outros projetos Wikimedia tambm contm
material sobre este tema:

Livros e manuais no Wikilivros

C++

Linguagem compilada

Linguagem de programao

Linguagem de programao de alto nvel

Lista de linguagens de programao

Unix

Compilador

Referncias
1. Ir para cima History of the C Programming Language (em ingls). Visitado em 23 de maio
de 2010.
2. Ir para cima Programming Language Popularity (em ingls). Visitado em 23 de maio de
2010.
3. Ir para cima TIOBE Programming Community Index (em ingls). Visitado em 23 de maio
de 2010.
4. Ir para cima C The Influence Factor of Many Popular Programming Languages (em
ingls). Visitado em 23 de maio de 2010.
5. Ir para cima RITCHIE, Dennis M. (January 1993). The Development of the C Language.
Visitado em 1 January 2008. "The scheme of type composition adopted by C owes
considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's
adherents would approve of."
6. Ir para cima A Brief History of C

7. Ir para cima (1978) "Portability of C Programs and the UNIX System". Bell System Tech.
J. 57 (6): 20212048.
8. Ir para cima Entrevista com Dennis Ritchie, Bjarne Stroustrup e James
Gosling(Ingls) Java Report e C++ Report (Julho de 2000). Visitado em 3 de junho de
2015.
9. Ir para cima Kernighan, Brian W.; Ritchie, Dennis M. The C Programming Language (em
ingls). Upper Saddle River, New Jersey: Prentice hall, 1978. 228 p. ISBN 0-13-110163-3
10. Ir para cima Rosangle Hickson. Aprenda a programa em C, C++ e C#. 2a ed.
[S.l.]: Campus. p. 3. ISBN 978-85-352-1479-6
11. Ir para cima Microsoft d mais nfase ao C++ (em ingls). Visitado em 23 de maio de
2010.
12. Ir para cima Grupo de trabalho do ISO C (em ingls). Visitado em 23 de maio de 2010