Introdução a C:
O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973. Não se sabe se o nome "C" foi dado à linguagem porque muitas de suas características derivaram da linguagem B e C é a letra conseguinte no alfabeto, ou porque "C" é a segunda letra do nome da linguagem BCPL, da qual derivou-se a linguagem B.
C foi originalmente desenvolvido para a implementação do sistema Unix (originalmente escrito em PDP-7 Assembly, por Dennis Ritchie e Ken Thompson). Em 1973, com a adição do tipo struct, C tornou-se poderoso o bastante para a maioria das partes do núcleo do Unix, serem reescritas em C. Este foi um dos primeiros sistemas que foram implementados em uma linguagem que não o Assembly, sendo exemplos anteriores os sistemas: Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). Segundo Ritchie, o período mais criativo ocorreu em 1972.
C é uma linguagem imperativa e procedural, para implementação de sistemas. Seus pontos de design foram para ele ser compilado. O C é uma linguagem estruturalmente simples e de grande portabilidade, pois o compilador C gera códigos mais enxutos e velozes do que muitas outras linguagens, e estes podem ser utilizados em qualquer SO (Sistema Operacional), desde que este possua o compilador de C. Embora estruturalmente simples (poucas funções intrínsecas) o C não perde funcionalidade pois permite a inclusão de uma farta quantidade de rotinas do usuário. Os fabricantes de compiladores fornecem uma ampla variedade de rotinas pré-compiladas em bibliotecas. O C fornece acesso de baixo nível à memória e baixos requerimentos do hardware, mas também foi desenvolvido para ser uma linguagem de alto nível, para maior reaproveitamento do código, ou seja a reusabilidade.
Essa propriedade não foi acidental, a linguagem C foi criada com o objetivo 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.
A linguagem C não possui Ortogonalidade: Em linguagem de programação, ortogonalidade significa que um conjunto relativamente pequeno de construções primitivas podem ser combinadas em um número pequeno de maneiras para construir as estruturas de controle e de dados de uma linguagem. Na prática, uma linguagem ortogonal seria mais fácil de aprender e teria menos exceções. Cada exceção é uma construção que precisa ser aprendida para ser evitada.
Exemplos de falta de ortogonalidade em C:
- Um struct (registro) podem ser valores de retorno de uma função, mas vetores não;
- Um vetor pode ser valor de retorno se estiver encapsulado por um struct;
- Um membro de um struct pode ser qualquer tipo de dado exceto void ou um struct do mesmo tipo;
- Um vetor pode ser de qualquer tipo exceto void;
- Todos os tipos de dados são passados por valor exceto vetores.
C é uma das linguagens de programação mais populares e existem poucas arquiteturas para as quais não existem compiladores para C. Essa linguagem tem influenciado muitas outras linguagens de programação, mais notavelmente C++, que originalmente começou como uma extensão para C.