Академический Документы
Профессиональный Документы
Культура Документы
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
C (linguagem de programao)
Origem: Wikipdia, a enciclopdia livre.
ndice
1 Histria
1.1 C K&R
1.2 ANSI C e ISO C
1.3 C99
1.4 C11
2 Viso geral
2.1 Tipos de dados
3 Relaes com C++
4 Exemplos
4.1 Programa Ol Mundo
4.2 Matemtica
4.3 Estruturas de dados
5 Baixo-nvel
6 Ferramentas de programao
7 Referncias
8 Ver tambm
9 Ligaes externas
C
Paradigma
Programao
estruturada
Programao
imperativa
Programao
procedural
Surgido em
1972
(dezembro de 2011)
Criado por
Dennis Ritchie
Estilo de
tipagem:
Esttica, Fraco
Inuenciada
por
Inuenciou
Licena:
Dependente de
implementao
Histria
1 de 13
12-05-2016 09:02
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]
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
C K&R
A linguagem C no teve um sucesso imediato aps a sua criao e o seu uso
cou 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 especicao 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
2 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
ANSI C e ISO C
Durante os nais da dcada de 1970, a linguagem C comeou a substituir a
linguagem BASIC como a linguagem de programao de microcomputadores
mais usada. Durante a dcada de 1980, foi adaptada para uso no PC IBM, e a
sua popularidade comeou a aumentar signicativamente. 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 especicao do padro da linguagem C. Aps um
processo longo e rduo, o padro foi completo em 1989 e raticado como ANSI
X3.159-1989 "Programming Language C". Esta verso da linguagem
frequentemente referida como ANSI C. Em 1990, o padro ANSI C, aps sofrer
umas modicaes 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-ociais 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.
3 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
C99
Aps o processo da padronizao ANSI, as especicaes 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 nais 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 ocial para comentrios de uma linha iniciados por //,
emprestados da linguagem C++
Vrias funes de biblioteca novas, tais como snprintf()
Vrios cheiros-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
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 especicao, como
ISO/IEC 9899:2011.
Viso geral
C uma linguagem imperativa e procedural, para implementao de sistemas.
4 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
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
codicadas 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 m, a
linguagem C possui as seguintes caractersticas:
Uma linguagem extremamente simples, com funcionalidades
no-essenciais, tais como funes matemticas ou manuseamento de
cheiros (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 denio de macros e a incluso de mltiplos
cheiros de cdigo fonte
Ponteiros do maior exibilidade 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)
Denio 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 automaticamente
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
5 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
Tipos de dados
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 utuante, caracteres e
estruturas (structs). 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 objeto 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 em Assembly, mas em tempo de compilao possui um tipo
complexo que indica o tipo do objecto para onde ele aponta, permitindo que se
verique 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, efetuada 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-denido (possivelmente uma falha de sistema) ao ser desreferenciado. Um
ponteiro que possui o valor NULL chamado ponteiro nulo. Os ponteiros so
6 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
oat
O tipo de dado oat serve para armazenar nmeros de ponto utuante, 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 utuante de
dupla preciso, normalmente tem o dobro do tamanho do oat 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.
8 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
Exemplos
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 cheiro (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!");
}
9 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
Matemtica
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 co
return 0;
}
Estruturas de dados
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];
};
10 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
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
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;
}
11 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
Ferramentas de programao
Bloodshed Dev-C++
IDE (Ambiente de desenvolvimento integrado), como Code::Blocks,
NetBeans e JetBrains CLion
GNU Compiler Collection
Automao de compilao, como make
Referncias
1. History of the C Programming Language (http://www.livinginternet.com
/i/iw_unix_c.htm) (em ingls). livinginternet.com. Consultado em 23 de maio de
2010.
2. Programming Language Popularity (http://www.langpop.com/) (em ingls).
langpop.com. Consultado em 23 de maio de 2010.
3. TIOBE Programming Community Index (http://www.tiobe.com/index.php/content
/paperinfo/tpci/index.html) (em ingls). tiobe.com. Consultado em 23 de maio de
2010.
4. C The Inuence Factor of Many Popular Programming Languages
(http://www.cprogramminglanguage.com/c-the-inuence-factor-of-many-popularprogramming-languages/) (em ingls). cprogramminglanguage.com. Consultado
em 23 de maio de 2010.
5. 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.
6. A Brief History of C (http://www.le.ac.uk/users/rjm1/cotter/page_06.htm)
7. 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. [S.l.: s.n.] 57 (6): 20212048. Consultado em 16 December 2012.
8. Entrevista com Dennis Ritchie, Bjarne Stroustrup e James Gosling
(http://www.gotw.ca/publications/c_family_interview.htm) (em (em ingls)). Java
Report e C++ Report. julho de 2000. Consultado em 3 de junho de 2015.
9. Kernighan, Brian W.; Ritchie, Dennis M (1978). The C Programming Language (em
ingls) (Upper Saddle River, New Jersey: Prentice hall). p.228.
ISBN 0-13-110163-3.
10. Rosangle Hickson. Aprenda a programa em C, C++ e C# (http://books.google.com
/books?id=phxP6FTc0p4C&pg=PA3) 2a ed. Campus [S.l.] p.3.
ISBN 978-85-352-1479-6.
11. Microsoft d mais nfase ao C++ (http://connect.microsoft.com/VisualStudio
/feedback/details/101293/vsnprintf-not-ansi-c99-compliant) (em ingls).
connect.microsoft.com. Consultado em 23 de maio de 2010.
12. Grupo de trabalho do ISO C (http://www.open-std.org/jtc1/sc22/wg14/) (em
ingls). open-std.org. Consultado em 23 de maio de 2010.
Ver tambm
12 de 13
12-05-2016 09:02
https://pt.wikipedia.org/wiki/C_(linguagem_de_...
C++
Linguagem compilada
Linguagem de programao
Linguagem de programao de alto nvel
Lista de linguagens de programao
Unix
Compilador
Ligaes externas
C Progressivo (http://www.cprogressivo.net/) (em portugus)
[[1] (http://user.das.ufsc.br/~jomi/das5334
/Livro%20Aberto%20Aprendendo%20a%20Programar%20naLinguagem%
20C.pdf) Aprendendo a programar -- Programando na Linguagem C -Jaime Evaristo, Universidade Federal de Alagoas] (em portugus)
Pgina ocial do ISO C Working Group (http://www.open-std.org/jtc1/sc22
/wg14/) (em ingls)
C (http://www.dmoz.org/Computers/Programming/Languages/C/) no Open
Directory Project
Obtida de "https://pt.wikipedia.org
/w/index.php?title=C_(linguagem_de_programao)&oldid=45565847"
Categorias: Linguagem de programao C
Linguagens de programao procedurais
Esta pgina foi modicada pela ltima vez (s) 19h56min de 9 de maio de
2016.
Este texto disponibilizado nos termos da licena Creative Commons Atribuio - Compartilha Igual 3.0 No Adaptada (CC BY-SA 3.0); pode
estar sujeito a condies adicionais. Para mais detalhes, consulte as
Condies de Uso.
13 de 13
12-05-2016 09:02