Вы находитесь на странице: 1из 19

UNINORTE Sistemas de Informao

Linguagem C

Adler Nascimento

Rio Branco 2014

Adler Nascimento

Linguagem C

Trabalho apresentado como requisito parcial para obteno de aprovao na disciplina Estrutura de Dados, no curso de Sistemas de Informao, na Uninorte.

Orientador: Edkallen Lima

Rio Branco 2014

SUMRIO

1 INTRODUO ...................................................................................................................................3 2 O QUE A LINGUAGEM C ............................................................................................................4 3 CARACTERSTICAS DA LINGUAGEM C ...................................................................................5 4 COMO ORGANIZADO UM PROGRAMA EM C .....................................................................6 5 ARQUIVO FONTE E PROJETO .....................................................................................................9 6.1 O PRIMEIRO PADRO .............................................................................................. 10 6.2 OS PADRES ANSI C E ISO C ................................................................................. 11 6.3 O PADRO C99 ......................................................................................................... 12 7 A INFLUNCIA DA LINGUAGEM C EM OUTRAS LINGUAGENS ......................................14 7.1 Influncia sobre a Linguagem JAVA ........................................................................... 15 REFERNCIAS ...................................................................................................................................18

1 INTRODUO

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.

2 O QUE A LINGUAGEM C

C uma linguagem de programao compilada de propsito geral, estruturada, imperativa, procedural, padronizada pela ISO, criada em 1972, por Dennis Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional Unix (que foi originalmente escrito em Assembly). C uma das linguagens de programao mais populares e existem poucas arquiteturas para as quais no existem compiladores para C. C tem influenciado muitas outras linguagens de programao, mais notavelmente C++, que

originalmente comeou como uma extenso para C

3 CARACTERSTICAS DA LINGUAGEM C

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: Uma linguagem extremamente simples, com funcionalidades no-essenciais,

tais como funes matemticas ou manuseamento de ficheiros (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 definio de macros e a incluso de mltiplos ficheiros de cdigo fonte Ponteiros do maior flexibilidade 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) Definio do alcance lexical de variveis Estruturas de variveis, (structs), que permitem que dados relacionados

sejam combinados e manipulados como um todo.

4 COMO ORGANIZADO UM PROGRAMA EM C

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 flutuante, 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 serdesreferenciado, uma operao que busca o objecto 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 verifique o tipo de expresses, incluindo ponteiros. Os ponteiros so usados extensivamente em C. O tipo 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 nodefinido (possivelmente uma falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL chamado ponteiro nulo. Os ponteiros so declarados (e desreferenciados) com um * (asterisco), portanto o tipo int* denota um ponteiro para nmero(s) inteiro(s). A linguagem C tambm fornece um tipo especial de ponteiros, o void*, que se traduz num ponteiro que aponta para um objecto de tipo desconhecido. 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. Como a linguagem C regularmente usada em programao de baixo-nvel de sistemas, h casos em que necessrio tratar um nmero inteiro como sendo um ponteiro, um nmero de ponto flutuante como sendo um nmero inteiro ou um tipo de ponteiro como sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem" (tambm denominado "converso de tipo" ou casting), uma operao que, caso seja possvel, fora a converso de um objecto de um tipo para outro. Apesar de ser por vezes necessrio, o uso de converses de tipo sacrifica alguma segurana oferecida pelo sistema de tipos. 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): int, pode possuir 16 bits, 32 bits ou 64 bits 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 long long int, deve possuir tamanho mnimo de 64 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 namemria 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 7541985.

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 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.

5 ARQUIVO FONTE E PROJETO

Arquivo fonte em linguagem de programao um arquivo que o programador escreveu, em linguagem inteligvel. Este arquivo fonte onde ser feita a manuteno, alterao ou alguma incluso no seu programa, depois que estiver pronto e salvo, pode ser em um editor de texto tipo notpad e compila o programa, na qual gerar um outro arquivo que foi transformado em linguagem de maquina, este o programa/projeto que vai ser rodado no seu computador.

10

6 PADRES DA LINGUAGEM C

Em qualquer livro de programao, normalmente as primeiras pginas so voltadas histria da linguagem (e so tambm as pginas que no lemos ou damos uma passada bem rpida). Mas conhecer a origem da linguagem pode nos ajudar a entender um pouco suas caractersticas. C uma linguagem desenvolvida por engenheiros e para engenheiros. Foi criada em 1972 por Dennis Ritchie para ser usada no desenvolvimento sistema operacional Unix no Bell Labs, que na poca pertencia AT&T (hoje parte da AlcatelLucent). C foi derivada da linguagem B, desenvolvida por Ken Thompson, que por sua vez se baseou-se na linguagem BCPL. Ritchie e Thompson tambm participaram da equipe de desenvolvimento do UNIX, cujas primeiras verses foram totalmente desenvolvidas em Assembly. Em certo momento, eles sentiram a necessidade de uma linguagem mais portvel para implementar o Unix no PDP-11. Esta linguagem precisava prover acesso de baixo nvel ao hardware (PCU, I/Os e perifricos) e se entender bem com o Assembly, precisava ser portvel para que o SO pudesse rodar em diferentes plataformas de hardware, alm de ter um bom desempenho e otimizar o uso de memria, principalmente numa poca em que estavam comeando a surgir as primeiras CPUs, e o preo por byte de memria era carssimo. Foi, portanto, destas necessidades que surgiu a linguagem C. Deste ento, 99,99999% das arquiteturas de CPU possuem a implementao de um compilador C.

6.1 O PRIMEIRO PADRO

O livro The C Programming Language, publicado em 1978 por Brian Kernighan e Dennis Ritchie, foi considerado o padro de facto da linguagem C durante muitos anos, at sair o padro ANSI C. Este padro informal tambm ficou conhecido como K&R C. provavelmente o livro de C que mais se vendeu at hoje, por vrios motivos. Dentre eles, foi o primeiro livro de C disponvel de forma mais abrangente, um dos autores do livro o prprio criador da linguagem, escrito de forma clara e possui

11

poucas pginas, comparado outras bblias que vemos por a. Todo desenvolvedor C deveria ter sua cpia.

6.2 OS PADRES ANSI C E ISO C

Durante a dcada de 80 choveram implementaes de compiladores C, j que naquela poca a semntica da linguagem estava aberta interpretaes. Surgiu ento a necessidade de um padro formal da linguagem. Este padro foi desenvolvido pelo ANSI (American National Standards Institute), que formou um comit e ratificou o padro em 1989 como ANSI X3.159-1989 Programming Language C, tambm conhecido com ANSI C ou C89. Um ano depois o padro foi adotado pela ISO (International Organization for Standardization)como ISO/IEC 9899:1990, tambm chamado de C90. Na

prtica, C89 (ANSI C) e C90 (ISO C) referem-se ao mesmo padro. A partir de 1990, a ISO ficou responsvel pela evoluo do padro. O endereo oficial do grupo este aqui, e um draft do padro pode ser visto aqui. O que eles fizeram foi acrescentar algumas novas caractersticas ao padro anterior K&R C. As principais mudanas foram a incluso de prottipos de funo, a padronizao das bibliotecas e a adio de algumas palavras-chave

como enum, const, volatile, signed, void (isso mesmo, estas palavras-chave no existiam formalmente antes do padro ANSI C). A maioria do cdigo compilado em K&R C, compila em ANSI C, com algumas excees. Para tratar estas excees, foi criado o #define __STDC__, que deveria ser implementado por padro em todos os compiladores ANSI C. Veja no exemplo abaixo o prottipo da funosoma() nos padres ANSI C e K&R C. 1 #if __STDC__ 2 extern int soma(int a, int b); 3 #else 4 extern int soma(); 5 #endif Todos os compiladores modernos suportam ANSI C. E ter um programa compatvel com ANSIC significa que este ser provavelmente portvel para qualquer arquitetura de hardware que possua um compilador ANSI C disponvel.

12

6.3 O PADRO C99

Na dcada de 90 a ISO corrigiu alguns detalhes e publicou em 1999 o ISO/IEC 9899:1999, que ficou conhecido como C99. Um draft do padro pode ser visto aqui. Dentre as alteraes, podemos destacar a incluso de funes inline, variveis long long, suporte para comentrios de uma linha, alm de no assumir int quando no especificado o retorno da funo. Por exemplo, o cdigo abaixo esta de acordo com o padro C89, mas no compila de acordo com o padro C99: 1 #include "stdio.h" 2 3 /* Retorna indice do maior elemento do array */ 4 maior(long buf[], int qtd) 5 { 6 long m = 0; 7 int i, ind = -1; 8 9 for (i = 0; i < qtd; i++) { 10 if (buf[i] > m) { 11 m = buf[i]; 12 ind = i; 13 } 14 } 15 16 return(ind); 17 } 18 19 main(void) 20 { 21 int m = -1; 22 23 long buf[] = { 1234, 3456, 7345, 5897 }; 24 25 if ((m = maior(buf, 4)) >= 0) 26 printf("Maior elemento buf[%d]=%ld\n", m, buf[m]); 27 else 28 printf("Maior elemento nao encontrado\n", buf[m]); 29 30 return 0; 31 } Para compilar de acordo com o padro C99, algumas linhas precisam ser alteradas: 1 #include "stdio.h" 2 3 int maior(long long buf[], int qtd); 4 5 // Retorna indice do maior elemento do array

13

6 inline int maior(long long buf[], int qtd) 7 { 8 long long m = 0; 9 int i, ind = -1; 10 11 for (i = 0; i < qtd; i++) { 12 if (buf[i] > m) { 13 m = buf[i]; 14 ind = i; 15 } 16 } 17 18 return(ind); 19 } 20 21 int main(void) 22 { 23 int m = -1; 24 25 long long buf[] = { 1234, 3456, 7345, 5897 }; 26 27 if ((m = maior(buf, 4)) >= 0) 28 printf("Maior elemento buf[%d]=%lld\n", m, buf[m]); 29 else 30 printf("Maior elemento nao encontrado\n", buf[m]); 31 32 return 0; 33 } Para compilar, foi necessrio alterar os retornos de funo, declarando explicitamente int. Alm disso, fizemos algumas alteraes permitidas no padro C99. Alteramos todas as variveis long para long long, usamos comentrios de uma linha com // e declaramos a funo maior() como inline. Com estas alteraes o cdigo ficou compatvel com o padro C99, mas perdeu a compatibilidade como padro ANSI C (C89).

14

7 A INFLUNCIA DA LINGUAGEM C EM OUTRAS LINGUAGENS

Dentre as inmeras caractersticas e importncias da linguagem C/C++, se destaca a influncia desta linguagem para desenvolvimento de outras como o, Java, PHP dentre outras, que no deixa de ser tambm uma evoluo da linguagem. Escolhemos, dentre outras, essas 2 linguagens a fim de demonstrar em quais aspectos e como se deu essa influncia da linguagem C. Antes de tudo vamos conhecer alguns aspectos estruturais da linguagem C/C++: Exemplo da linguagem C++ (trecho do cdigo): #include<ioestream.h> void main() { Int nota; cout<<"Trabalho de Fundamentos da Programao\nDigite a nota do trabalho "; cin>>nota; if((nota<=10)&&(nota>=0)) { Cout<<Nota Armazenada!!!; } Else { Cout<<Nota Invalida; } } /*Obs: Os pontos destacados so os as principais semelhanas com as outras linguagens que ser exemplificada*/

15

7.1 Influncia sobre a Linguagem JAVA

A linguagem de programao Java basicamente constitui-se em um programa (interpretador) para execuo da linguagem. O interpretador chamado de mquina virtual ou virtual machine. Os programas em Java podem ser executados em qualquer sistema operacional, desde que o interpretador esteja instalado. Uma caracterstica importante da linguagem ser multiplataforma, justamente por causa deste interpretador e, com uma sintaxe at certo ponto parecida com o C++, porm com 10 bibliotecas diferentes. Quando um programa compilado e gerado um cdigo intermedirio chamado de bytecode. Este bytecode interpretado pelas mquinas virtuais Java (JVMs) para a maioria dos sistemas operacionais. A mquina virtual a responsvel por criar um ambiente multiplataforma, ou seja, se algum construir um sistema operacional novo, basta criar uma mquina virtual Java que traduza os bytecodes para cdigo nativo e todas as aplicaes Java estaro rodando sem problemas. Como j foi dito a linguagem Java e muito verstil, podendo ser utilizada para construir vrios tipos de aplicativos, para diferentes meios e finalidades. (Ex: web, desktop, servidores, mainframes, jogos, aplicaes mveis, chips de identificao, etc.). PHP uma linguagem de programao de computadores interpretada, livre e muito utilizada para gerar contedo dinmico na Web. Apesar de ser uma linguagem de fcil aprendizado e de uso para pequenos scripts dinmicos simples, o PHP uma linguagem poderosa orientada a objetos. A linguagem surgiu por volta de 1994, como um subconjunto de scripts Perl criados por Rasmus Lerdof, com o nome PHP/FI (Personal Home Page Tools/Forms Interpreter). Trata-se de uma linguagem extremamente modularizada, o que a torna ideal para instalao e uso em servidores web. Diversos mdulos so criados no repositrio de extenses PECL (PHP Extension Community Library) e alguns destes mdulos so introduzidos como padro em novas verses da linguagem.

A linguagem PHP muito parecida, em tipos de dados, sintaxe e mesmo funes, com a linguagem C e com a C++. Pode ser, dependendo da configurao

16

do servidor, embutida no cdigo HTML. A linguagem PHP e utilizada para desenvolvimento web embora apresente variantes como o PHP-GTK. A linguagem utilizada especificamente em construo de pginas dinmicas e baseadas em banco de dados. O PHP uma linguagem interpretada diretamente pelo servidor onde esta armazenado os arquivos em php. Desta forma o cdigo e interpretado e passado para o usurio como um simples cdigo html.

17

8 CONCLUSO

Com esse trabalho, pudemos perceber a importncia da linguagem de programao C para a histria do desenvolvimento de Software, as circunstncias em que se deu sua criao e alguns aspectos de sintaxe dessa linguagem.

Conclumos que a linguagem no s contribuiu para resolver os problemas da poca em que foi concebida mas serve de referncia at os dias de hoje, deixando um legado vastssimo para linguagens posteriores a ela. Entendemos que a despeito de ser uma linguagem relativamente antiga, a linguagem ainda tem uma grande aceitao nos meios acadmicos e profissionais, estando longe de ser uma linguagem morta e obsoleta.

18

REFERNCIAS C. Disponvel em: <http://pt.scribd.com/doc/88592568/2417-C-ou-C> Acesso em: 28 fev. 2014

C, Linguagem de Programao. Disponvel em: <http://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)> Acesso em: 28 fev. 2014

C: Histrias e Padres. Disponvel em: <http://sergioprado.org/linguagem-chistoria-e-padroes/> Acesso em: 28 fev. 2014

Linguagem C: Arquivo Fonte e Projetos. Disponvel em: <http://aulasdec.wordpress.com/2011/07/09/sobre-arquivos-de-codigo-fontearquivos-de-cabecalhos-e-projetos/> Acesso em: 28 fev. 2014