Você está na página 1de 10

C (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.


C[2] é uma linguagem de programação compilada de propósito geral,
estruturada, imperativa, procedural, padronizada por Organização C
Internacional para Padronização (ISO), criada em 1972 por Dennis
Ritchie na empresa AT&T Bell Labs para desenvolvimento do sistema Paradigma programação estruturada
programação imperativa
operacional Unix (originalmente escrito em Assembly).[3] programação procedural
Surgido em 1972
C é uma das linguagens de programação mais populares[4][5] e existem
poucas arquiteturas para as quais não existem compiladores para C. C Última versão C18 (junho de 2018)
tem influenciado muitas outras linguagens de programação (por Criado por Dennis Ritchie
exemplo, a linguagem Java),[6] mais notavelmente C++, que Estilo de estática, fraca
originalmente começou como uma extensão para C.
tipagem:
Compiladores Borland C, Clang, GNU
A linguagem C encontra-se na versão/padrão internacional C18 standard GCC, MSVC, Turbo C,
Watcom C, Tiny C
revision (ou ISO/IEC 9899:2018) lançada em junho de 2018, Compiler
substituindo a versão C11 (standard ISO/IEC 9899:2011),[7] disponível
Dialetos: ANSI C, C99, C11, ISO C,
em ISO e IEC e com suporte para GCC8 e Clang LLVM6.[8] K&R C
Influenciada ALGOL 68, Assembly, B,
por BCPL, CPL, Fortran, PL/I
Influenciou AWK, BitC, C++, C♯, C
Índice Shell, D, Euphoria, Go,
Java, JavaScript, Limbo,
História Logic Basic, Objective-C,
C K&R Perl, PHP, Python
ANSI C e ISO C
Licença: dependente da
C99 implementação
C11
Extensão do .c, .h[1]
Visão geral arquivo:
Tipos de dados
Relações com C++
Exemplos
Programa Olá Mundo
Matemática
Estruturas de dados
Ferramentas de programação
Ver também
Referências
Ligações externas

História
O desenvolvimento inicial de C ocorreu no AT&T Bell Labs
entre 1969 e 1973.[9] de acordo com Ritchie, o período mais
criativo ocorreu em 1972. A linguagem foi chamada "C", porque
suas características foram obtidas a partir de uma linguagem
anteriormente chamado de "B", que de acordo com a Ken
Thompson era versão reduzida da linguagem de programação
BCPL.[10]

A versão original PDP-11 do sistema Unix foi desenvolvido em


assembly. Em 1973, com a adição dos tipos struct, a
linguagem C tornou-se poderosa o suficiente para que a maior Ken Thompson e Dennis Ritchie (da esquerda
parte do kernel do Unix fosse reescrito em C. Este foi um dos para direita), os criadores das linguagens B e C,
primeiros núcleos de sistemas operacionais implementados numa respectivamente
linguagem diferente da linguagem Assembly. Em 1977, foram
feitas novas mudanças por Ritchie e Stephen C. Johnson para facilitar a portabilidade do sistema operacional Unix. O Portable C
Compiler de Johnson serviu de base para várias implementações de C em novas plataformas.[11]

C K&R
A linguagem C não teve um sucesso imediato após a sua criação e o seu uso ficou restrito a alguns laboratórios,[12] mas em 1978
Brian Kernighan e Dennis Ritchie lançam o livro The C Programming Language.[13] que serviu de tutorial e mudou a história da
programação em C. De fato essa primeira versão da linguagem é conhecida como "C Kernigham e Ritchie" ou apenas "C
K&R".[14]

Esse livro, conhecido pelos programadores de C como "K&R", serviu durante muitos anos como uma especificação informal da
linguagem. A versão da linguagem C que ele descreve é usualmente referida como "K&R C". A segunda edição do livro cobriu o
padrão posterior, o ANSI C. K&R C introduziu as seguintes características na linguagem:

Biblioteca padrão 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 léxico do compilador fazia confusão entre i =+
10 e i = +10. O mesmo acontecia com =-)
K&R C é frequentemente considerado a parte mais básica da linguagem, cujo suporte deve ser assegurado por um compilador C.
Durante muitos anos, mesmo após a introdução do padrão ANSI C, K&R C foi considerado o "menor denominador comum", em
que programadores de C se apoiavam quando uma portabilidade máxima era desejada, já que nem todos os compiladores eram
actualizados o bastante para suportar o padrão ANSI C.

Nos anos que se seguiram à publicação do K&R C, algumas características "não-oficiais" foram adicionadas à linguagem,
suportadas por compiladores da AT&T e de outros vendedores. Estas incluíam:

Funções void e tipos de dados void *


Funções que retornam tipos struct ou union
Campos de nome struct num espaço de nome separado para cada tipo struct
Atribuição a tipos de dados struct
Qualificadores const para criar um objecto só de leitura
Biblioteca padrão, que incorpora grande parte da funcionalidade implementada por vários vendedores
Enumerações
Cálculos de ponto-flutuante em precisão simples (no K&R C, os cálculos intermediários eram feitos sempre em
double, porque era mais eficiente na máquina onde a primeira implementação do C foi feita)

ANSI C e ISO C
Durante os finais da década de 1970, a linguagem C começou a substituir a linguagem BASIC como a linguagem de programação
de microcomputadores mais usada. Durante a década de 1980, foi adaptada para uso no PC IBM, e a sua popularidade começou a
aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente com outros nos laboratórios Bell, começou a
trabalhar num projecto onde se adicionavam extras para programação orientada por objectos à linguagem C. A linguagem que
eles produziram, chamada C++, é nos dias de hoje a linguagem de programação de aplicações 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 padrões (ANSI) formou um comité, X3J11, para estabelecer uma especificação do
padrão da linguagem C. Após um processo longo e árduo, o padrão foi completo em 1989 e ratificado como ANSI X3.159-1989
"Programming Language C". Esta versão da linguagem é frequentemente referida como ANSI C. Em 1990, o padrão ANSI C,
após sofrer umas modificações menores, foi adotado pela Organização Internacional para Padronização (ISO) que cria o grupo de
trabalho para cuidar da especificação da linguagem, denominado WG14, assim foi renomeada para ISO/IEC 9899:1990, também
conhecido como C89 e C90.[15] Um dos objetivos do processo de padronização ANSI C foi o de produzir um sobreconjunto do
K&R C, incorporando muitas das características não-oficiais subsequentemente introduzidas. Entretanto, muitos programas
tinham sido escritos e que não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de
funções não-padrão e ao fato de alguns compiladores não aderirem ao ANSI C.

C99
Após o processo da padronização ANSI, as especificações da linguagem C permaneceram relativamente estáticas por algum
tempo, enquanto a linguagem C++ continuou a evoluir. (em 1995, a Normative Amendment 1 criou uma versão nova da
linguagem C mas esta versão raramente é tida em conta.) Contudo, o padrão foi submetido a uma revisão nos finais da década de
1990, levando à publicação da norma ISO 9899:1999 em 1999. Este padrão é geralmente referido como "C99" e foi adoptado
como um padrão ANSI em março de 2000. As novas características do C99 incluem:

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++.[16]

C11
Em 2007, se iniciou o trabalho em antecipação de outra revisão do padrão de C, informalmente chamada de C11 ou C1X. O
comitê dos padrões de C adotou regras para limitar a inserção de novos recursos que não tenham ainda sido testados por
implementações existentes.[17]
Em dezembro de 2011 foi publicada a versão estável da especificação, como ISO/IEC 9899:2011.

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 irrestrito a 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 foram 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 procedural 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 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 procedural
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
Ponteiros dão maior flexibilidade à linguagem
Acesso de baixo nível, através de inclusões de código Assembly no meio do programa C
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 comum em linguagens interpretadas)
Vetores que crescem automaticamente
Classes ou objetos com comportamento (ver Orientação a objetos)
Clausuras
Funções aninhadas
Sobrecarga de operadores
Meta-programação
Apoio nativo de multithreading e comunicação por rede
Apesar da lista de características úteis que C possui não 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é interpretadores de outras linguagens
sejam implementados em C.

C tem como ponto forte a sua eficiência, e é a linguagem de programação preferida para o desenvolvimento de sistemas e
softwares de base, apesar de também ser usada para desenvolver programas de computador. É também muito usada no ensino de
ciência da computação, mesmo não tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso. Outra
característica importante de C é o seu código resultante em Assembly ter funcionamento idêntico ao código fonte, que permite
que um projetista seja capaz de fazer algumas previsões de como o software irá se comportar ao ser executado.

O ponto negativo de C está na possibilidade do programador cometer erros graças a liberdade que a linguagem oferece. Por
exemplo é possível acessar área de memória que não pertence a um vetor ao acessar um índice maior que seu tamanho,
possibilitando que ocorra um buffer overflow. Isto acontece em C porque o dever de controlar a memória está nas mãos do
programador. O motivo de C dar total controle para o programador é porque a linguagem foi projetada para programar o sistema
operacional UNIX, onde havia a necessidade desse controle sobre a forma como o sistema iria funcionar. [3]

Tipos de dados
C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem ALGOL, tais como Pascal. Possui tipos para
números inteiros de vários tamanhos com e sem sinal, números de ponto flutuante, caracteres e estruturas (structs). C usa
extensivamente ponteiros, um tipo muito simples de referência que guarda o endereço de memória da variável. O ponteiro pode
ser desreferenciado, uma operação que busca o objeto que se encontra na morada da memória que o ponteiro possui, morada essa
que pode ser manipulada através de aritmética de ponteiros. Durante o tempo de execução, o ponteiro é simplesmente uma
morada de máquina tais como aquelas manipuladas em Assembly, mas em tempo de compilação possui um tipo complexo que
indica o tipo do objecto para onde ele aponta, permitindo que se verifique o tipo de expressões, incluindo ponteiros. O tipo
"string" (cadeia ou linha de texto) de C é simplesmente um ponteiro para um vetor de caracteres e alocação dinâmica de memória,
descrita abaixo, é efetuada através de ponteiros.

Os ponteiros em C possuem um valor reservado especial, NULL, que indica que não estão a apontar para uma morada. O uso
desse valor como morada é muito útil na construção de várias estruturas de dados, mas causa comportamento não-definido
(possivelmente uma falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL é chamado ponteiro nulo. Os
ponteiros são declarados (e desreferenciados) com um * (asterisco), portanto o tipo int* denota um ponteiro para número(s)
inteiro(s). A linguagem C também fornece um tipo especial de ponteiros, o void*, que se traduz num ponteiro que aponta para um
objeto de tipo desconhecido.

A linguagem C também tem apoio em nível de linguagem para vetores estáticos (de dimensão fixa) de tipos. As disposições de
tipos podem parecer ter mais que uma dimensão apesar de serem tecnicamente disposições de disposições de tipos. Em memória,
tais estruturas são posicionadas com as linhas uma depois da outra (a alternativa seria armazenar os dados em colunas, usado em
outras linguagens). O acesso a disposições de tipos é feito através de ponteiros e aritmética de ponteiros; o nome da disposição é
tratado como se fosse um ponteiro que aponta para o início da disposição. Em certas aplicações não é razoável usarem-se
disposições de tipos de dimensão fixa e por isso a alocação dinâmica de memória pode ser usada para criar disposições de tipos
de dimensão variável.

Como a linguagem C é regularmente usada em programação de baixo-nível de sistemas, há casos em que é necessário tratar um
número inteiro como sendo um ponteiro, um número de ponto flutuante como sendo um número inteiro ou um tipo de ponteiro
como sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem" (também denominado "conversão de
tipo" ou "casting"), uma operação que, caso seja possível, força a conversão de um objeto de um tipo para outro. Apesar de ser
por vezes necessário, o uso de conversões de tipo sacrifica alguma segurança oferecida pelo sistema de tipos.

int

O tipo de dado int (inteiro) serve para armazenar valores numéricos inteiros. Existem vários 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 mínimo 16 bits e não pode ser maior que int
long int, deve possuir tamanho mínimo de 32 bits
long long int, deve possuir tamanho mínimo de 64 bits
Todos estes tipos de inteiros podem ainda ser declarados precedidos da cláusula unsigned, o que faz com que só suporte números
positivos. Isto faz com que, com o mesmo tamanho, uma variável suporte mais números positivos do que um signed (todos os
inteiros são signed por omissão).

char

O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o programa reserva um espaço de 8
bits na memória RAM ou em registradores do processador para armazenar um valor (char de tamanho maior que 8 bits é
permitido pela linguagem, mas os casos são raros). Com vetores do tipo char é possível criar cadeias de caracteres (strings).

float

O tipo de dado float serve para armazenar números de ponto flutuante, ou seja, com casas decimais. O padrão mais utilizado nos
últimos 10 anos é o IEEE 754-1985.

double

O tipo de dado double serve para armazenar números de ponto flutuante de dupla precisão, normalmente tem o dobro do tamanho
do float e portanto o dobro da capacidade. O padrão mais adotado também é o IEEE 754-1985.

struct

Em C podem ser usadas estruturas (chamados de registos em outras linguagens de programação). As estruturas são grupos de
variáveis organizadas arbitráriamente pelo programador. Uma estrutura pode criar um novo tipo de variável caso typedef seja
usado em sua declaração.

Relações com C++


A linguagem de programação C++ foi originalmente derivada do C para suportar programação orientada a objetos. À medida que
as linguagens C e C++ foram evoluindo independentemente, a divisão entre as duas veio a aumentar. O padrão C99 criou um
número de características que entram em conflito. Hoje, as principais diferenças entre as duas linguagens são:

inline - em C++, funções em linha encontram-se no espaço global enquanto que em C encontram-se no
espaço local. Por outras palavras, isso significa que, em C++, qualquer definição de qualquer função em linha
(sem ser a respeito da sobrecarga de funções de C++) tem de estar em conformidade com a "regra de uma
definição" da linguagem C++. Mas em C, a mesma função 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-cabeçalho
<stdbool.h> (_Bool está sempre disponível). Padrões anteriores de C não definiam um tipo booleano e vários
(e incompatíveis) métodos foram usados para simular um tipo booleano
Algumas características originalmente desenvolvidas em C++ também apareceram em C. Entre elas encontram-se:

protótipos de função (com declaração de tipos de parâmetros) e remoção do "int" implícito


comentários de linha, indicados por //; comentários de linha terminam com um carácter de nova-linha
a palavra-chave inline
tipagem mais forte

Exemplos

Programa Olá Mundo


A seguinte aplicação foi publicada na primeira edição de C de K&R, e tornou-se no programa de introdução padrão da maior
parte dos livros sobre C. O programa envia o texto "Olá, Mundo!" para a saída padrão, que é normalmente o console, mas que
também pode ser um ficheiro (ou arquivo), um outro dispositivo qualquer, ou até mesmo um bit bucket, dependendo de como a
saída-padrão é 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 alterações no programa original:

# include <stdio.h> /* Pacotes com funções de entrada e saída */

int main(void)
{
puts("Olá, Mundo!");
return 0; /* Retorna 0, pois `main` retorna um `int` */
}
/* Nova linha após 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 conteúdo do arquivo qual diretiva se refere. Neste caso o arquivo padrão stdio.h (que contém
protótipos de funções para trabalho com entrada e saída) irá substituir a linha. Os caracteres < e > indicam que o arquivo stdio.h
encontra-se no local em que, quando da configuração do compilador, se definiu como padrão para localização dos ficheiros de
inclusão (header files, geralmente com a extensão .h).

A linha (não-vazia) seguinte indica que uma função denominada main será definida. A função main tem um significado especial
nos programas em C, pois é a função que é inicialmente executada (em inglês, entry point). Os caracteres { e } delimitam a
extensão da função. O termo int define a função main como sendo uma função que retorna um número inteiro. O termo void
indica que a função não aceita parâmetros. A função main, normalmente aceita parâmetros, que são passado pela linha de
comando. Os compiladores e sistemas operacionais atuais reconhecem as seguintes declarações de main:

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

A linha seguinte "chama", ou executa uma função chamada puts; o arquivo incluído, stdio.h, contém a informação que
descreve a forma como a função puts deve ser chamada. Nesta chamada, é passado à função puts um único argumento, a linha
de texto constante "Olá, Mundo!". A função puts retorna um valor, um int, mas como não é usado, é descartado pelo
compilador. O comando return retorna o valor 0 para o sistema, que é interpretado pelo mesmo como que a função main() foi
executada e encerrada com sucesso (sem erros). Por fim, o caracter } indica o fim da função main. Note-se que texto rodeado
por /* e */ (comentários de texto) é ignorado pelo compilador. Os compiladores que obedecem à norma C99 também aceitam
como comentários as linhas de texto que são precedidos por //.

Matemática
O seguinte código realiza seis operações matemáticas, adição, subtração, multiplicação, divisão, exponenciação e radiciação, e
em seguida envia os seus respectivos resultados para a saída padrão (normalmente o console).

# include <math.h> // necessária para pow() e sqrt()


# include <stdio.h> // necessária 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 fracionário
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 função é necessária apenas nos sistemas Windows, para manter o
terminal (Prompt de comando) aberto
return 0;
}

Estruturas de dados
No exemplo seguinte, é criada uma estrutura composta por 3 elementos de tipos diferentes. Após ser declarada uma variável "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"}; // declaração da variável "exemplo"

printf("Nome: %s\n", exemplo.nome);


printf("Idade: %hu\n", exemplo.idade);
printf("RG: %s\n", exemplo.rg);

getchar(); // desnecessário, 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 = {"Filipe", 16, "00.000.000-00"}; // declaração da variável "exemplo"

printf("Nome: %s\n", exemplo.nome);


printf("Idade: %hu\n", exemplo.idade);
printf("RG: %s\n", exemplo.rg);

getchar();
return 0;
}

Ferramentas de programação
Bloodshed Dev-C++
IDE (Ambiente de desenvolvimento integrado), como Code::Blocks, NetBeans e JetBrains CLion
GNU Compiler Collection
Automação de compilação, como make

Ver também
Linguagem de programação
Linguagem de programação de alto nível
Lista de linguagens de programação
Tipo abstrato de dado

Referências
1. «Overall Options - Using the GNU Compiler Collection (GCC)» (https://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Over
all-Options.html). gcc.gnu.org (em inglês). Consultado em 13 de dezembro de 2017
2. «ISO/IEC 9899:2018» (https://www.iso.org/standard/74528.html). ISO (em inglês). Consultado em 8 de novembro
de 2018
3. «History of the C Programming Language» (http://www.livinginternet.com/i/iw_unix_c.htm) (em inglês).
livinginternet.com. Consultado em 23 de maio de 2010
4. «Programming Language Popularity» (http://www.langpop.com/) (em inglês). langpop.com. Consultado em 23 de
maio de 2010
5. «TIOBE Programming Community Index» (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) (em
inglês). tiobe.com. Consultado em 23 de maio de 2010
6. «C – The Influence Factor of Many Popular Programming Languages» (http://www.cprogramminglanguage.com/c
-the-influence-factor-of-many-popular-programming-languages/) (em inglês). cprogramminglanguage.com.
Consultado em 23 de maio de 2010
7. «The Standard - C» (http://www.iso-9899.info/wiki/The_Standard). ISO (em inglês). Consultado em 8 de
novembro de 2018
8. «Initial C17 Language Support Lands In LLVM Clang 6.0 SVN - Phoronix» (https://www.phoronix.com/scan.php?p
age=news_item&px=LLVM-Clang-C17-Support). Phoronix (em inglês). Consultado em 8 de novembro de 2018
9. Ritchie, Dennis M. (janeiro de 1993). «The Development of the C Language» (http://cm.bell-labs.com/cm/cs/who/
dmr/chist.html). Consultado em 1 de janeiro de 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."
10. A Brief History of C (http://www.le.ac.uk/users/rjm1/cotter/page_06.htm)
11. Johnson, S. C.; Ritchie, D. M. (1978). «Portability of C Programs and the UNIX System» (http://cm.bell-labs.com/
cm/cs/who/dmr/portpap.pdf) (PDF). Bell System Tech. J. 57 (6): 2021–2048. Consultado em 16 de dezembro de
2012
12. «Entrevista com Dennis Ritchie, Bjarne Stroustrup e James Gosling» (http://www.gotw.ca/publications/c_family_in
terview.htm) (em (em inglês)). Java Report e C++ Report. Julho de 2000. Consultado em 3 de junho de 2015
13. Kernighan, Brian W.; Ritchie, Dennis M (1978). The C Programming Language (em inglês). Upper Saddle River,
New Jersey: Prentice hall. 228 páginas. ISBN 0-13-110163-3
14. Rosangle Hickson. Aprenda a programa em C, C++ e C# (http://books.google.com/books?id=phxP6FTc0p4C&pg
=PA3) 2a ed. [S.l.]: Campus. p. 3. ISBN 978-85-352-1479-6
15. «Especificações da linguagem C» (https://www.mentebinaria.com.br/artigos/especifica%C3%A7%C3%B5es-da-li
nguagem-c-r17/). Mente Binária. Consultado em 8 de novembro de 2018
16. «Microsoft dá mais ênfase ao C++» (http://connect.microsoft.com/VisualStudio/feedback/details/101293/vsnprintf-
not-ansi-c99-compliant) (em inglês). connect.microsoft.com. Consultado em 23 de maio de 2010
17. «Grupo de trabalho do ISO C» (http://www.open-std.org/jtc1/sc22/wg14/) (em inglês). open-std.org. Consultado
em 23 de maio de 2010

Ligações externas
Sítio oficial (https://www.iso.org/standard/74528.html) (em inglês)
Grupo ISO WG14 (http://www.open-std.org/jtc1/sc22/wg14/) (em inglês) manutenção da linguagem C
Aprendendo a programar na Linguagem C, por Universidade Federal de Alagoas (http://user.das.ufsc.br/~jomi/d
as5334/Livro%20Aberto%20Aprendendo%20a%20Programar%20naLinguagem%20C.pdf)
C (linguagem de programação) (https://dmoztools.net/Computers/Programming/Languages/C/) no DMOZ

Obtida de "https://pt.wikipedia.org/w/index.php?title=C_(linguagem_de_programação)&oldid=56346223"

Esta página foi editada pela última vez às 11h26min de 27 de setembro de 2019.

Este texto é disponibilizado nos termos da licença Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC BY-SA 3.0) da
Creative Commons; pode estar sujeito a condições adicionais. Para mais detalhes, consulte as condições de
utilização.

Você também pode gostar