Академический Документы
Профессиональный Документы
Культура Документы
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
C K&R
A linguagem C no teve sucesso imediato aps sua criao e seu uso ficou restrito a
alguns laboratrios mas em 1978 Brian Kerningham e Dennis Rithcie lanam o livro
The C Programming Language.8 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".9
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:
Campos de nome struct num espao de nome separado para cada tipo struct
Enumeraes
ANSI C e ISO C
C99
Funes em linha
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 dado
boolean explicito (chamado _Bool) e um tipo complex que representa nmeros
complexos
Suporte oficial para comentrios de uma linha iniciados por //, emprestados da
linguagem C++
C11
Viso geral
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 ao
paradigma 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:
Um sistema de tipos simples que evita vrias operaes que no fazem sentido
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)
Closures
funes aninhadas
Sobrecarga de operadores
Meta-programao
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 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
A linguagem C tambm tem apoio a nvel de linguagem para vetores estticas (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.
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):
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
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 criar
cadeias 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
a palavra-chave inline
Exemplos
Programa Ol Mundo
int main(void)
{
puts("Ol, Mundo!");
}
int main(void)
{
puts("Ol, Mundo!");
return 0; /* Retorna 0, pois `main` retorna um `int` */
}
/* Nova linha aps fechar a chave principal */
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
int main()
{
int a = 2, b = 3;
Estruturas de dados
#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"
Ou, equivalente:
#include <stdio.h>
int main()
{
Pessoa exemplo = {"Felipe", 16, "00.000.000-00"}; // declarao da
varivel "exemplo"
getchar();
return 0;
}
Baixo-nvel
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;
return 0;
}
Por se tratar de uma classificao subjetiva, isto , sem limites bem definidos, no
possvel afirmar que "determinada linguagem pode ser mais humana que outra". Apesar
disso, por questo de praticabilidade e objetividade, a classificao geralmente se limita
em "linguagem de alto nvel" e "linguagem de baixo nvel".
ASP
ActionScript
C/C++
C#
Pascal/Object Pascal
Euphoria
Java
Lua
MATLAB
PHP
Python
Ruby
Tcl
Basic/Visual Basic