apresentação linguagem c

69
Linguagem Programação C Sun Ricardo Liyushiro Chikasawa Rafael Stoffalette João C

Upload: ricardo-chikasawa

Post on 12-Jun-2015

1.797 views

Category:

Documents


5 download

DESCRIPTION

Apresentação da linguagem C

TRANSCRIPT

Page 1: Apresentação Linguagem C

Linguagem Programação C

SunRicardo Liyushiro ChikasawaRafael Stoffalette João

C

Page 2: Apresentação Linguagem C

Linguagem C – LP 2011 2

• Contexto Histórico

• Critérios de Avaliação

• Características

• Estruturas de um Programa

• Identificadores

• Variáveis

• Operadores

• Tipos de Dados

• Estrutura de Controle de Fluxo

Tópicos

Page 3: Apresentação Linguagem C

Linguagem C – LP 2011 3

• Binding

• Compilador

• Processo de Compilação

• Ligação com Bibliotecas

• Registro de Ativação

• Otimização

• Bibliografia

Tópicos

Page 4: Apresentação Linguagem C

Linguagem C – LP 2011 4

• 3ª Geração : Desenvolvida no início dos anos 1970

• Derivada BCPL (Linguagem de Programação Básica Combinada).Anos depois foi utilizada por Ken Thompson para desenvolver a B, que se tornaria a base para a C.

• O sistema operacional UNIX foi desenvolvido quase inteiramente em C (tornando-o fácil de portar para diferentes máquinas). C é “baixo nível”, execução eficiente e leve.

Contexto Histórico

Page 5: Apresentação Linguagem C

Linguagem C – LP 2011 5

Contexto Histórico

Page 6: Apresentação Linguagem C

Linguagem C – LP 2011 6

Contexto Histórico

Page 7: Apresentação Linguagem C

Linguagem C – LP 2011 7

Características

• Desenvolvimento em Unix : em ambientes unix o uso de C é bastante vantajoso, pois C é o linguagem oficial em unix, possuindo ferramentas de desenvolvimento e depuração difíceis de se encontrar para outras linguagens

• Flexibilidade: C não apresenta limitações inerentes que impeçam seu uso em quase qualquer área de aplicação, com quase qualquer técnica de programação

• Eficiente: a Semântica de C é em muitos aspectos próximos ao “abaixo nível”, ou seja, muitas de sua contruções espelham diretamente aspectos de computadores tradicionais, permitindo facilmente um uso eficiente dos recursos da máquinas

Page 8: Apresentação Linguagem C

Linguagem C – LP 2011 8

Características

• Disponibilidade: é provalvemente a linguagem mais difundida ao mundo , sendo provável que se encontre pelo menos um compilador C razoável (que suporte pelo menos a versão padrão da linguagem e de suas bibliotecas), para qualquer máquina desejada.

• Portabilidade: programa C são bastante dependentes da bibliotecas utilizadas e o porte de um programa C de uma plataforma para outra não é automático nem necessariamente fácil. Porém é possível, com mínimo de disciplina e organização , a escrita de programas facilmente portáveis.

Page 9: Apresentação Linguagem C

Linguagem C – LP 2011 9

Estrutura de um Programa

• Um cabeçalho contendo as diretivas de compiladores onde se definem o valor de constantes simbólicas, declaração de variáveis globais, inclusão de bibliotecas, declaração de rotinas, etc;

• Um bloco de instruções principal e outros blocos de rotinas;

• Documentação do programa: comentários

Page 10: Apresentação Linguagem C

Linguagem C – LP 2011 10

Identificadores

• Um identificador deve iniciar por uma letra ou por um “_” (underscore);

• A partir do segundo caracter pode conter letras, números e underscore;

• C é uma linguagem case-sensitive (nomes com letras maiúsculas diferentes de nomes com letras Minúsculas)

• Palavras reservadas:

Page 11: Apresentação Linguagem C

Linguagem C – LP 2011 11

Variáveis

• Uma variável é uma posição de memória que pode ser indentificada através de um nome, e é usada para guardar um valor. O conteúdo de uma variável pode ser alterado através de um comando de atribuição.

• Todas as variáveis devem ser declaradas antes de ser usadas

• Variáveis podem consistir em um ou mais nomes de identificadores separados por vírgula.

• A declaração de variáveis pode ser feitas dentro de funções (variáveis locais), na definição de parâmetros das funções (parâmetros formais) e fora de todas as funções (variáveis globais)

Page 12: Apresentação Linguagem C

Linguagem C – LP 2011 12

Variáveis

• Escopo de Variáveis• Variáveis locais:

• são aquelas declaração dentro da função

• Podem ser referênciadas por comandos que estão dentro do bloco no qual as variáveis foram declaradas.

void func1(void){

int x;x = 10;

}void func2(void){

int x;x = -199;

}

Variável local

Variável local (não tem Relação com anterior)

Page 13: Apresentação Linguagem C

Linguagem C – LP 2011 13

Variáveis

• Escopo de Variáveis• Globais

• são aquelas reconhecidas pelo programa inteiro.

• Pode ser usado por qualquer pedaço de código e guardam seus valores durante toda a execução do programa.

#include <stdio.h>

int cont; // Variável globalvoid func1(void);

void main (void) {cont = 100;func1();

}

Page 14: Apresentação Linguagem C

Linguagem C – LP 2011 14

Variáveis

• Classes de Variáveis• extern

• Especificador extern nas declarações de variáveis diz ao compilador que os tipos e nomes de variável que o seguem foram declarados em outro arquivo.

• Deixa o compilador saber o tipo e o nome das variáveis globais sem realmente criar armazenamento para ela novamente. Quando o linker unir os módulos, todas as referências a variáveis externas são resolvidas.

// Arquivo 1

int x, y;char ch; main (void) {:}

func1() { x = 123; }

// Arquivo 2

extern int x, y;extern char ch;

func22(void) { x = y/10;}

Func23() { y = 10;}

Page 15: Apresentação Linguagem C

Linguagem C – LP 2011 15

Variáveis

• Classes de Variáveis• register

• Caracter e inteiros são armazenados nos Registradores da CPU ao invés da memória, onde as variáveis normais são armazenados

• Só pode ser aplicado a variáveis locais.

int_pwr(register int m, register int e) // "m" e "e" declaradas como register porque são usadas num laço

{register int temp;temp = 1;for (; e; e--)temp = temp * m;return temp;

}

Page 16: Apresentação Linguagem C

Linguagem C – LP 2011 16

Operadores

• Operador Lógico

• Operador Aritmético

Page 17: Apresentação Linguagem C

Linguagem C – LP 2011 17

Tipos de Dados

Page 18: Apresentação Linguagem C

Linguagem C – LP 2011 18

Tamanho de Tipos

• A linguagem C define uma variedade de tipos que representam inteiros em diferentes intervalos

• O número de bytes alocados depende do tamanho da palavra da máquina e do compilador

• sizeof (T) retorna o número de bytes usado pelo tipo T

Page 19: Apresentação Linguagem C

Linguagem C – LP 2011 19

Ponto Flutuante

double dot (double a[], double b[], int tam) { int i; double res = 0.0; for (i=tam;i>0;i--) res += a[i]*b[i]; return res;}

poderia ser escrita em assembly como: dot: push %ebp mov %esp, %ebp mov 8(%ebp), %eax /* endereco de a[0] */ mov 12(%ebp), %edx /* endereco de b[0] */ fldz /* res = 0.0 */ mov 16(%ebp), %ecx /* i = tam */fori: cmp $0, %ecx jle fim fldl (%eax) /* a[i] */ fldl (%edx) /* b[i] */ fmulp /* a[i]*b[i] */ faddp /* res += a[i]*b[i] */ add $8, %eax /* atualiza endereco de a[i] */ add $8, %edx /* atualiza endereco de b[i] */ dec %ecx /* atualiza i */ jmp forifim: mov %ebp, %esp /* resultado ja' esta' na pilha! */ pop %ebp ret

Page 20: Apresentação Linguagem C

Linguagem C – LP 2011 20

Caracteres

• Caracteres (letras e símbolos) são representados usando-se uma codificação

• Codificação mais comum é a ASCII• Codificação 8 bits

• Tabela mais completa em : http//www.asciitable.com

Page 21: Apresentação Linguagem C

Linguagem C – LP 2011 21

Tipo Char

• Em C, o tipo char ocupa apenas 1 bytes

• Pode-se manipular um char com um valor inteiro(int)

char c;int val;...if (c > ‘0’)......val = c - ‘0’;...val = c - ‘a’ + 10;...

Page 22: Apresentação Linguagem C

Linguagem C – LP 2011 22

Representação de Array

• C usa implementação bastante simples de arrays• Alocação contínua na memória

• Para um tipo T e uma constante N, a declaração T a[N] aloca uma região contínua de memória com NxL bytes, onde L é o tamanho em bytes do tipo T (sizeof(T))• sizeof(a) = sizeof (T) * N

• Primeiro elemento (a[0]) corresponde ao menor endereço de memória

Page 23: Apresentação Linguagem C

Linguagem C – LP 2011 23

Representação de Array

Page 24: Apresentação Linguagem C

Linguagem C – LP 2011 24

Array Multi - dimensionais

• Mesma forma de alocação e acesso ao elementos

• int a[3][2] → a é um array de três elementos• Cada elementos de a é um array (2 elementos)

• a é um array de array → e a é um ponteiro para um array

• a[i] é um array → e é um ponteiro para inteiros

• Cálculo do endereço de elemento a [i] [j]

Page 25: Apresentação Linguagem C

Linguagem C – LP 2011 25

Alocação de Array Aninhado

• Declaração T A[R][C]• R linhas, C colunas

• Elemento do tipo T ocupa K bytes

• Tamanho do Array• R * C * K bytes

• Ordenação por linha

Page 26: Apresentação Linguagem C

Linguagem C – LP 2011 26

Alocação de array na Pilha

Page 27: Apresentação Linguagem C

Linguagem C – LP 2011 27

Structs

Page 28: Apresentação Linguagem C

Linguagem C – LP 2011 28

Alocação Dinâmica de Memória

int *ptr_a;ptr_a = malloc(sizeof(int));ptr_a = 90;free(ptr_a);

Page 29: Apresentação Linguagem C

Linguagem C – LP 2011 29

Estrutura de Controle de Fluxo

• Comando de Seleção• Forma do comando if:

• if(<condição>) <comando>

• if(<condição>) <comando> else <comando>

Page 30: Apresentação Linguagem C

Linguagem C – LP 2011 30

Estrutura de Controle de Fluxo

• Comando de Seleção• Forma do comando switch

• switch( <condição> ) <comando>

• Forma do operador ternário:

• <expressão1> ? <expressão2> : <expressão3>

• Comando de Repetição• while(<expressão_de_controle>) {<comando>}

• do{<comando>} while {<expressão_de_controle>}

• for(<comad_inic>;<comand_controle>;<comand_passo>) {<comand>}

Page 31: Apresentação Linguagem C

Linguagem C – LP 2011 31

Estrutura de Controle de Fluxo

• Comando de Desvio• Linguagem C tem quatro comandos que realizam um

desvio incondicional : return , goto, break.

• return<expressão>

• goto<rótulo>..<rótulo>

• break:tem duas utilizações, a primeira para terminar um case em comando switch, ou para forçar o término imediato de um laço, evitando o teste condicional normal do laço

• continue: em vez de formar o término, continue força que a próxima interação do laço, pulando qualquer código intermediário.

Page 32: Apresentação Linguagem C

Linguagem C – LP 2011 32

Ambiente Binding

• A interpretação de comandos e expressões , tais como a =5 ou g(a+1), dependem do que denotam os identificadores utilizados nesses comandos e expressões.

• Um ambiente é um conjunto de Binding

• Cada binding tem um determinado escopo, isto é , a região do programa onde a entidade é visivel.

int a =13;

void f() { int b =a;

int a = 2; b =b+a;

}

Page 33: Apresentação Linguagem C

Linguagem C – LP 2011 33

Escopo Estático

• Definição do subprograma

• Tempo de compilação

• Texto do programa

x x x

y

z

w

y

w

x

z

Bloco Monolítico Bloco Não Aninhados Bloco Aninhados

Page 34: Apresentação Linguagem C

Linguagem C – LP 2011 34

Escopo Estático

• Ocultamento de Entidade em Blocos Alinhados

void main() {

int i=0; int x=10; while(i++<100) {

float x=3.231;printf(“x=%f \n”, x*i);

} }

Page 35: Apresentação Linguagem C

Linguagem C – LP 2011 35

Escopo Dinâmico

• Chamada do subprograma

• Tempo de execução

• Fluxo de controle do programa

sub() {

int x=1; sub1() {

escreva(x); } sub2() {

int x=3;sub1();

} sub2(); sub1();

}

•Baixa eficiência•Baixa legibilidade•Problemas Acesso•Menor Confiabilidade

Page 36: Apresentação Linguagem C

Linguagem C – LP 2011 36

Compilador a = b + c * 3

Análise Léxica

Id1 = id2 + id3 * number

# id info1 a2 b3 c

Tabela de Símbolos

Análise Sintática =

id1 +

Id2 *

id3 Number

teste1.c

Page 37: Apresentação Linguagem C

Linguagem C – LP 2011 37

Compilador

Análise Semântica

=

id1 +

Id2 *

id3 Number

=

id1 +

Id2 *

id3 Intoreal(3)

Page 38: Apresentação Linguagem C

Linguagem C – LP 2011 38

Compilador

5/23/11 38

=

id1 +

Id2 *

id3 Intoreal(3)

Geração de CódigoIntermediário

temp1 = intoreal(3)temp2 = id3 * temp1temp3 = id2 + temp2id1 = temp3

Otimização CódigoIntermediário

temp1 = id3 * 3.0id1 = id2 + temp1

Geração Código Alvo

MOV id3, R2MUL #3.0, R2MOV id2, R1ADD R2, R1MOV R1, id1

gcc -fdump-tree-gimple <arquivo.c>

gcc -fdump-tree-optimized <arquivo.c>

Page 39: Apresentação Linguagem C

Linguagem C – LP 2011 39

Geração de Código Intermediário

• Cada posição de memória é tratada como um registrador sequências de instruções possuem no máximo três operandos

• Possui assim um único operador além da atribuição precedência é resolvida através da ordem de execução

• Posições temporárias são geradas e usadas para armazenar valores intermediários.

Page 40: Apresentação Linguagem C

Linguagem C – LP 2011 40

Código Otimizado

temp1 = id3 * 3.0

id1 = id2 + temp1

gcc -fdump-tree-optimized <arquivo.c>

Page 41: Apresentação Linguagem C

Linguagem C – LP 2011 41

Otimização de Código

• Procurar melhorar o código intermediário gerado em termos:• Velocidade de execução

• Quantidade de armazenamento utilizado

• É uma tarefa relativamente complexa que usualmente toma tempo significativo da compilação, entretanto algumas otimizações simples podem memorar muito o tempo de execução sem retardar demais a compilação.

Page 42: Apresentação Linguagem C

Linguagem C – LP 2011 42

Geração de Código

• Fase final da compilação que produz código relocável ou assembly

• Posições de memórias são selecionadas para cada um das variáveis usadas pelo programa

• Um importante aspecto é a atribuição de variáveis para registradores do processador

• Instruções do código intermediário são traduzidas em sequências específicas de instruções de máquinas.

• Alguns compiladores procuram otimizar novamente o código final gerado

Page 43: Apresentação Linguagem C

Linguagem C – LP 2011 43

Processo de Compilação

pre-processador

Compilador

Assembler

Linker

Programa fonte

Programa fonte“expandido”

Programa Assembly

Objeto

hello.c

hello.i

hello.s

hello.o

Page 44: Apresentação Linguagem C

Linguagem C – LP 2011 44

pre-processador

Compilador

Assembler

Linker

Programa fonte

Programa fonte“expandido”

Programa Assembly

Objeto

hello.c

hello.i

hello.s

teste.o

Page 45: Apresentação Linguagem C

Linguagem C – LP 2011 45

pre-processador

Compilador

Assembler

Linker

Programa fonte

Programa fonte“expandido”

Programa Assembly

Objeto

hello.c

hello.i

hello.s

teste.o

Page 46: Apresentação Linguagem C

Linguagem C – LP 2011 46

pre-processador

Compilador

Assembler

Linker

Programa fonte

Programa fonte“expandido”

Programa Assembly

Objeto

hello.c

hello.i

hello.s

hello.o'

Arquivo .o em LinguagemDe máquina

Visualizar o objeto

Page 47: Apresentação Linguagem C

Linguagem C – LP 2011 47

pre-processador

Compilador

Assembler

Linker

Programa fonte

Programa fonte“expandido”

Programa Assembly

Objeto

hello.c

hello.i

hello.s

hello.o

Arquivo .o em LinguagemDe máquina

Executável

Page 48: Apresentação Linguagem C

Linguagem C – LP 2011 48

Processo de Compilação

• Pré-processador• No Primeiro Passo, o pré-processador mapea instruções

escritas numa linguagem de alto nível estendida, para instruções da linguagem de programação original.

• Expande macros em arquivos fontes antes deles serem compilados

• Quando um macro é definida, o pré-processador insere o código correspondente até comando #endif

Page 49: Apresentação Linguagem C

Linguagem C – LP 2011 49

Processo de Compilação

• Pré-processador• Macro pode ser também definidas com o #define no

arquivo fonte ou nos arquivos de cabeçalho

Page 50: Apresentação Linguagem C

Linguagem C – LP 2011 50

Processo de Compilação

• Pré-processador• Macro pode ser também utilizadas passando valor

• -DVAR=VALOR

Page 51: Apresentação Linguagem C

Linguagem C – LP 2011 51

Processo de Compilação

• Compilador• Pega código fonte pré-processado e o traduz em

instruções de linguagem de máquina, linguagem que o computador entende. Estas são guardadas num ficheiro á parte, chamando arquivo objeto e tem a extesão “.o” .

• Linker• O arquivo objeto tem as instruções em linguagem

máquina, o computador ainda não pode correr como um programa. Para isso precisa a combinação do arquivo objeto com as partes da biblioteca run-time fazendo finalmente a criação de um ficheiro executável .

Page 52: Apresentação Linguagem C

Linguagem C – LP 2011 52

Ligação com Bibliotecas

(cc1,as) (cc1,as)

hello.c bye.c

hello.o bye.o

Linker (id)

p2 libc.so

Loder/Dynamic Linker

libc.so

Executável totalmenteLigado na memória

Informaçõesde relocaçãoe tabela de

símbolo

Executável parcialmenteLigado (em disco)

Page 53: Apresentação Linguagem C

Linguagem C – LP 2011 53

Ligação com Bibliotecas

(cc1,as) (cc1,as)

hello.c bye.c

hello.o bye.o

Linker (id)

p2 libhello.so

Loder/Dynamic Linker

Executável totalmenteLigado na memória

Informaçõesde relocaçãoe tabela de

símbolo

Executável parcialmenteLigado (em disco)

Page 54: Apresentação Linguagem C

Linguagem C – LP 2011 54

Ligação com Bibliotecas

• Dependências de bibliotecas compartilhadas: ldd• Verifica quais são e se a bibliotecas compartilhadas

necessárias já foram encontradas

• Caso afirmativo, o caminho da biblioteca é apresentado– ldd <arquivo_executável>

• Criar as bibliotecas compartilhadas• -shared

– gcc -shared -o <biblioteca.so> <lista_arq_objetos>

Page 55: Apresentação Linguagem C

Linguagem C – LP 2011 55

Registro de Ativação

Page 56: Apresentação Linguagem C

Linguagem C – LP 2011 56

Acesso ao Registro de Ativação

Page 57: Apresentação Linguagem C

Linguagem C – LP 2011 57

Exemplo de variável local

Page 58: Apresentação Linguagem C

Linguagem C – LP 2011 58

Outro Exemplo

Page 59: Apresentação Linguagem C

Linguagem C – LP 2011 59

Níveis de Otimização

• Oferecidos pelo Gcc e Compilador Intel para lidar com:• Tempo de compilação

• Uso de memória

• Compromisso entre velocidade e tamanho do executável.

• Escolhidos uma opção de linha de comando• Formato: -ONÍVEL (Nível pode variar de 0 até 3)

• -O0: não realiza otimização

• -O1: realiza as formas mais comuns de otimizações que não requerem compromisso entre velocidade e tamanho

• -O2: adiciona otimizações em relação ao O1 que incluem agendamento de instruções

• -O3: adiciona otimizações em relação O2 que incluem inserção de funções e procedimento que aumentam velocidade mas aumentam o tamanho do código.

Page 60: Apresentação Linguagem C

Linguagem C – LP 2011 60

Níveis de Otimização

• Escolhidos uma opção de linha de comando• -funroll-loops: Idependente das anteriores, habilita a

desenrolamento de laços

• -Os: seleciona apenas otimizações que reduzem o tamanho de executável para plataforma com restrições de recursos

Page 61: Apresentação Linguagem C

Linguagem C – LP 2011 61

Exemplo de Otimização

O código ao lado será testado pelo compilador GCC e Intel e o resultados serão obtidos.

Onde:

User: tempo de execução do processador em CPU Total: tempo total para execução do programa incluindo tempo de espera por CPU Sys: tempo esperando chamadas de sistema

Page 62: Apresentação Linguagem C

Linguagem C – LP 2011 62

Exemplo de Otimização

• -O0 (GCC)

• -O1 (GCC)

• -O2 (GCC)

Page 63: Apresentação Linguagem C

Linguagem C – LP 2011 63

Exemplo de Otimização

• -O3 (GCC)

• -funroll-loops (GCC)

• -Os (GCC)

Page 64: Apresentação Linguagem C

Linguagem C – LP 2011 64

Exemplo de Otimização

• -O0 (Intel)

• -O1 (Intel)

• -O2 (Intel)

Page 65: Apresentação Linguagem C

Linguagem C – LP 2011 65

Exemplo de Otimização

• -O3 (Intel)

• -Os (Intel)

Page 66: Apresentação Linguagem C

Linguagem C – LP 2011 66

Conclusão do Exemplo

O0 O1 O2 O3 Os0

0,5

1

1,5

2

2,5

3

3,5

4

INTELGCC

Page 67: Apresentação Linguagem C

Linguagem C – LP 2011 67

Open MP

• Programação Paralela

• Suporta Multi-Plataforma

• Memória Compartilhada

Page 68: Apresentação Linguagem C

Linguagem C – LP 2011 68

Bibliografia

• http://www.ibm.com/developerworks/br/library/l-gcc4/

• http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

• http://www.redhat.com/magazine/002dec04/features/gcc/#internal-org-gcc

• http://gcc.gnu.org/wiki/HomePage

http://blog.ksplice.com/tag/objdump/

• http://www.inf.pucminas.br/professores/marciocampos/clp/

• http://www.inf.puc-rio.br/~inf1018/2010.2/

• http://www.cse.iitb.ac.in/~uday/courses/cs324-05/gccProjects/node4.html

• http://homepages.dcc.ufmg.br/~fpereira/classes/dcc024/ementa/#lesson13

• http://marcelino.com.sapo.pt/CMan/Chap5.htm

• http://www.inf.pucrs.br/~pinho/PRGSWB/Ponteiros/ponteiros.html

• http://intranet.deei.fct.ualg.pt/PI_flobo/teorica22.html

• http://ces33.wikidot.com/gerenciamento-de-memoria

• www.ceng.metu.edu.tr/courses/ceng242/documents/slides/binding.pdf

• http://en.wikipedia.org/wiki/C_%28programming_language%29

• http://www.cic.unb.br/~pedro/trabs/buffer_overflow.htm

Page 69: Apresentação Linguagem C

Linguagem C – LP 2011 69

Bibliografia

• SEBESTA, Linguagem de Programação, Bookman 5d

• LOUDEN. Compiladores, Princíos e Práticas, Thomson

• GARCIA,R,E. Linguagem de Programação, Apresentação em Sala, Unesp-FCT

• CAMOLESI, Compiladores, Apresentações em Sala, Unesp-FCT