====== História ====== A linguagem de programação C é uma linguagem de programação estruturada e padronizada criada na década de 1970 por [[http://en.wikipedia.org/wiki/Ken_Thompson_(computer_programmer)|Ken Thompson]] e [[http://en.wikipedia.org/wiki/Dennis_Ritchie|Dennis Ritchie]] para ser usada no sistema operacional Unix. Desde então espalhou-se por muitos outros sistemas operacionais, e tornou-se numa das [[http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html|linguagens de programação mais usadas]]. A linguagem C tem como ponto-forte a sua eficiência e é a linguagem de programação de preferência para o desenvolvimento de aplicações para sistemas operacionais, apesar de também ser usada para desenvolver aplicações mais complexas. O desenvolvimento inicial da linguagem C ocorreu nos laboratórios Bell da AT&T entre 1969 e 1973. Deu-se o nome "C" à linguagem porque muitas das suas características derivaram de uma linguagem de programação anterior chamada "B". Há vários relatos que se referem à origem do nome "B": Ken Thompson dá crédito à linguagem de programação BCPL mas ele também criou uma outra linguagem de programação chamada Bon, em honra da sua mulher Bonnie. Por volta de 1973, a linguagem C tinha-se tornado suficientemente poderosa para que grande parte do núcleo de Unix, originalmente escrito na linguagem de programação PDP-11/20 assembly, fosse reescrito em C. Este foi um dos primeiros núcleos de sistema operacional que foi implementado numa linguagem sem ser o assembly, sendo exemplos anteriores o sistema Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). ===== C de K&R ===== Em 1978, Ritchie e [[http://en.wikipedia.org/wiki/Brian_Kernighan|Brian Kernighan]] publicaram a primeira edição do livro //The C Programming Language//. 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 "**C de K&R**". K&R introduziram as seguintes características na linguagem: * [[tipos_dados|tipos de dados struct]] * [[tipos_dados|tipos de dados long int]] * [[tipos_dados|tipos de dados unsigned int]] O [[operadores|operador]] ''=+'' foi alterado para ''+='', e assim sucessivamente (o analizador léxico do compilador confundia o [[operadores|operador]] ''=+''. Por exemplo, ''i =+ 10'' e ''i = +10''). C de K&R é frequentemente considerado a parte mais básica da linguagem que é necessário que um compilador C suporte. Nos anos que se seguiram à publicação do C K&R, algumas características "não-oficiais" foram adicionadas à linguagem, suportadas por compiladores da AT&T e de outros fornecedores. Estas incluiam: * [[definicao_funcao|funções]] void e [[tipos_dados|tipos de dados void *]] * [[definicao_funcao|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 * uma biblioteca-padrão que incorpora grande parte da funcionalidade implementada por vários fornecedores * enumerações * o tipo de [[tipos_dados|ponto-flutuante]] de precisão simples ===== C ANSI e C ISO ===== 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 adoptada para uso no PC IBM, e a sua popularidade começou a aumentar significativamente. Ao mesmo tempo, [[http://en.wikipedia.org/wiki/Bjarne_Stroustrup|Bjarne Stroustrup]], juntamente com outros nos laboratórios Bell, começou a trabalhar num projeto onde se adicionava programação orientada à objetos à 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 operacional Windows da Microsoft; enquanto o C permanece 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 ''C ANSI''. Em 1990, o padrão C ANSI, após sofrer umas modificações menores, foi adotado pela Organização Internacional de Padrões (ISO) como ''ISO/IEC 9899:1990''. Um dos objectivos do processo de padronização ''C ANSI'' foi o de produzir um subconjunto do ''C K&R'', incorporando muitas das características não-oficiais subsequentemente introduzidas. Entretanto, muitos programas já tinham sido escritos e não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas não-padrão (por exemplo, interfaces gráficas) alguns compiladores não aderirem ao padrão ''C ANSI''. ===== C99 ===== Após o processo ANSI de padronização, as especificações da linguagem C permaneceram relativamente estáticas por algum tempo, enquanto que a linguagem C++ continuou a evoluir. 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". O padrão foi adotado como um padrão ANSI em Março de 2000. As novas características do C99 incluem: * Funções em linha ; * Levantamento 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 [[tipos_dados|long long int]] (para minimizar a dor da transição de 32-bits para 64-bits), um tipo de dados [[tipos_dados|boolean]] explicito e um tipo [[tipos_dados|complex]] que representa números complexos; * Disposições de dados de comprimento variável; * Suporte oficial para [[comentarios|comentários]] de uma linha, emprestados da linguagem C++; * Várias funções de biblioteca novas, tais como [[snprintf]]; * Vários [[pre_compilacao|arquivos-cabeçalho]] novos, tais como stdint.h . O interesse em suportar as características novas de C99 parece depender muito das entidades. Apesar do [[http://gcc.gnu.org/|gcc]] e vários outros compiladores suportarem grande parte das novas características do C99, os compiladores mantidos pela Microsoft e pela Borland não, e estas duas companhias não parecem estar muito interessadas adicionar tais funcionalidades, ignorando por completo as normas internacionais. --- //[[marcos@laureano.eti.br|Marcos Laureano]] 2009/05/08 05:32//