SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Downloaden Sie, um offline zu lesen
C
                         Linguagem Programação C


                          Sun
Ricardo Liyushiro Chikasawa
Rafael Stoffalette João
Tópicos
•   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



           Linguagem C – LP 2011     2
Tópicos
•   Binding
•   Compilador
•   Processo de Compilação
•   Ligação com Bibliotecas
•   Registro de Ativação
•   Otimização
•   Bibliografia




           Linguagem C – LP 2011   3
Contexto Histórico
•   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.

            Linguagem C – LP 2011        4
Contexto Histórico




      Linguagem C – LP 2011   5
Contexto Histórico




      Linguagem C – LP 2011   6
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áquinasLP 2011
                    Linguagem C –              7
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.


                   Linguagem C – LP 2011       8
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




                   Linguagem C – LP 2011      9
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:




                   Linguagem C – LP 2011        10
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)
                  Linguagem C – LP 2011      11
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;                    Variável local
                           x = 10;
              }
              void func2(void)
              {
                           int x;
                           x = -199;                 Variável local (não tem
              }
                                                     Relação com anterior)




                             Linguagem C – LP 2011                       12
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 global
                             void func1(void);

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




                        Linguagem C – LP 2011               13
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              // Arquivo 2

                      int x, y;                 extern int x, y;
                      char ch;                  extern char ch;
                      main (void) {
                      :                          func22(void) {
                      }                              x = y/10;
                                                }
                      func1() {
                          x = 123;              Func23() {
                      }                           y = 10;
                                                }                  14
                        Linguagem C – LP 2011
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;
             }




                             Linguagem C – LP 2011                                       15
Operadores
•   Operador Lógico




•   Operador Aritmético




                  Linguagem C – LP 2011   16
Tipos de Dados




            Linguagem C – LP 2011   17
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




                       Linguagem C – LP 2011                18
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 fori
     fim:    mov %ebp, %esp          /* resultado ja' esta' na pilha! */
             pop %ebp
             ret




                        Linguagem C – LP 2011                              19
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




                      Linguagem C – LP 2011           20
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;
                 ...




                 Linguagem C – LP 2011       21
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




                       Linguagem C – LP 2011   22
Representação de Array




             Linguagem C – LP 2011   23
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]




                       Linguagem C – LP 2011               24
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




                      Linguagem C – LP 2011   25
Alocação de array na Pilha




             Linguagem C – LP 2011   26
Structs




          Linguagem C – LP 2011   27
Alocação Dinâmica de Memória
 int *ptr_a;
 ptr_a = malloc(sizeof(int));
 ptr_a = 90;
 free(ptr_a);




                 Linguagem C – LP 2011   28
Estrutura de Controle de Fluxo
•   Comando de Seleção
    •   Forma do comando if:
         •   if(<condição>) <comando>
         •   if(<condição>) <comando> else <comando>




                       Linguagem C – LP 2011           29
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>}




                        Linguagem C – LP 2011             30
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.


                         Linguagem C – LP 2011                31
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;
                  }
                  Linguagem C – LP 2011      32
Escopo Estático
       •   Definição do subprograma
       •   Tempo de compilação
       •   Texto do programa

   x                       x                      x
                          y                       y

                                                      w
                          z

                                                  z
                          w
                                                      x


Bloco Monolítico       Bloco Não Aninhados       Bloco Aninhados
                         Linguagem C – LP 2011            33
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);
                     }
            }




                    Linguagem C – LP 2011               34
Escopo Dinâmico
        •   Chamada do subprograma
        •   Tempo de execução
        •   Fluxo de controle do programa
sub()
{
            int x=1;                                      •Baixa eficiência
            sub1()                                        •Baixa legibilidade
            {                                             •Problemas Acesso
                    escreva(x);                           •Menor Confiabilidade
            }
            sub2()
            {
                    int x=3;
                    sub1();
            }
            sub2();
            sub1();
}                                 Linguagem C – LP 2011                       35
Compilador
     a=b+c*3

                             Tabela       de Símbolos
     Análise Léxica          #            id     info
                             1            a                       teste1.c
                             2            b
Id1 = id2 + id3 * number     3            c


                                          =
    Análise Sintática
                              id1                  +

                                         Id2             *

                                                   id3       Number

                           Linguagem C – LP 2011                      36
Compilador
      =

id1         +
                                           Análise Semântica
      Id2         *

            id3       Number

                                             =

                                 id1                   +

                                            Id2              *

                                                       id3       Intoreal(3)

                               Linguagem C – LP 2011                           37
Compiladorgcc -fdump-tree-optimized <arquivo.c>
           =
                                                          Otimização Código
   id1            +                                          Intermediário

           Id2           *
                                                                 temp1 = id3 * 3.0
                   id3       Intoreal(3)                         id1 = id2 + temp1


    Geração de Código
                                                       Geração Código Alvo
      Intermediário


                                                                MOV       id3, R2
                                                                MUL       #3.0, R2
         temp1 = intoreal(3)
                                                                MOV       id2, R1
         temp2 = id3 * temp1
                                                                ADD       R2, R1
         temp3 = id2 + temp2
                                                                MOV       R1, id1
         id1 = temp3
gcc -fdump-tree-gimple <arquivo.c>
                               Linguagem C – LP 2011            5/23/11
                                                                             38   38
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.




                  Linguagem C – LP 2011      39
Código Otimizado


 temp1 = id3 * 3.0

 id1 = id2 + temp1




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

                     Linguagem C – LP 2011           40
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.




                     Linguagem C – LP 2011      41
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


                   Linguagem C – LP 2011      42
Processo de Compilação
    hello.c
Programa fonte

                            hello.i
       pre-processador
                         Programa fonte
                          “expandido”

                                                            hello.s
                                      Compilador
                                                           Programa
                                                           Assembly

                                                                                hello.o
                                                                    Assembler
                                                                                Objeto



                                                                                     Linker




                                            Linguagem C – LP 2011                         43
hello.c
Programa fonte

                            hello.i
       pre-processador
                         Programa fonte
                          “expandido”

                                                            hello.s
                                      Compilador
                                                           Programa
                                                           Assembly

                                                                                teste.o
                                                                    Assembler
                                                                                Objeto



                                                                                     Linker




                                            Linguagem C – LP 2011                        44
hello.c
Programa fonte

                            hello.i
       pre-processador
                         Programa fonte
                          “expandido”

                                                            hello.s
                                      Compilador
                                                           Programa
                                                           Assembly

                                                                                teste.o
                                                                    Assembler
                                                                                Objeto



                                                                                     Linker




                                            Linguagem C – LP 2011                        45
hello.c
Programa fonte

                            hello.i                                             Arquivo .o em
       pre-processador
                         Programa fonte
                                                                                 Linguagem
                          “expandido”                                            De máquina

                                                            hello.s
                                      Compilador
                                                           Programa
                                                           Assembly

                                                                                     hello.o'
                                                                    Assembler
                                                                                     Objeto



                                                                                          Linker

                     Visualizar o objeto

                                            Linguagem C – LP 2011                             46
hello.c
                                                Arquivo .o em
Programa fonte                                   Linguagem
                                                 De máquina
                            hello.i
       pre-processador
                         Programa fonte
                          “expandido”
                                                                                Executável
                                                            hello.s
                                      Compilador
                                                           Programa
                                                           Assembly

                                                                                hello.o
                                                                    Assembler
                                                                                Objeto



                                                                                     Linker




                                            Linguagem C – LP 2011                         47
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




                        Linguagem C – LP 2011               48
Processo de Compilação
•   Pré-processador
    •   Macro pode ser também definidas com o #define no
        arquivo fonte ou nos arquivos de cabeçalho




                     Linguagem C – LP 2011          49
Processo de Compilação
•   Pré-processador
    •   Macro pode ser também utilizadas passando valor
         •   -DVAR=VALOR




                     Linguagem C – LP 2011           50
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 .




                      Linguagem C – LP 2011            51
Ligação com Bibliotecas
                                hello.c              bye.c



                                (cc1,as)            (cc1,as)


                                                                 libc.so
                                 hello.o             bye.o
                                                                   Informações
                                                                   de relocação
                                          Linker (id)               e tabela de
                                                                      símbolo


       Executável parcialmente
                                               p2            libc.so
          Ligado (em disco)


                               Loder/Dynamic Linker

                                                    Executável totalmente
                                                     Ligado na memória
                  Linguagem C – LP 2011                                52
Ligação com Bibliotecas
                                hello.c              bye.c



                                (cc1,as)            (cc1,as)


                                 hello.o             bye.o

                                                                 Informações
                                          Linker (id)            de relocação
                                                                  e tabela de
                                                                    símbolo
       Executável parcialmente
                                               p2        libhello.so
          Ligado (em disco)


                               Loder/Dynamic Linker

                                                    Executável totalmente
                                                     Ligado na memória
                  Linguagem C – LP 2011                                53
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>




                          Linguagem C – LP 2011                  54
Registro de Ativação




             Linguagem C – LP 2011   55
Acesso ao Registro de Ativação




             Linguagem C – LP 2011   56
Exemplo de variável local




              Linguagem C – LP 2011   57
Outro Exemplo




            Linguagem C – LP 2011   58
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. 59
                        Linguagem C – LP 2011
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




                      Linguagem C – LP 2011             60
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
                           Linguagem C – LP 2011   61
Exemplo de Otimização
•   -O0 (GCC)




•   -O1 (GCC)




•   -O2 (GCC)




                Linguagem C – LP 2011   62
Exemplo de Otimização
•   -O3 (GCC)




•   -funroll-loops (GCC)




•   -Os (GCC)




                   Linguagem C – LP 2011   63
Exemplo de Otimização
•   -O0 (Intel)




•   -O1 (Intel)




•   -O2 (Intel)




                  Linguagem C – LP 2011   64
Exemplo de Otimização
•   -O3 (Intel)




•   -Os (Intel)




                  Linguagem C – LP 2011   65
Conclusão do Exemplo


   4

  3,5

   3

  2,5

   2                                           INTEL
                                               GCC
  1,5

   1

  0,5

   0
        O0   O1         O2           O3   Os




                  Linguagem C – LP 2011                66
Open MP
•   Programação Paralela
•   Suporta Multi-Plataforma
•   Memória Compartilhada




                  Linguagem C – LP 2011   67
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



                                Linguagem C – LP 2011                         68
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




                          Linguagem C – LP 2011                   69

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Aula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoAula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoInstituto CENTEC
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Linguagem C 03 Estruturas De Decisao
Linguagem C 03 Estruturas De DecisaoLinguagem C 03 Estruturas De Decisao
Linguagem C 03 Estruturas De DecisaoRegis Magalhães
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++PeslPinguim
 
Arquitetura 6 exercícios
Arquitetura 6   exercíciosArquitetura 6   exercícios
Arquitetura 6 exercíciosPaulo Fonseca
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 

Was ist angesagt? (20)

Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Aula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoAula 2 - Lógica de Programação
Aula 2 - Lógica de Programação
 
Algoritmos: Tipos de Dados
Algoritmos: Tipos de DadosAlgoritmos: Tipos de Dados
Algoritmos: Tipos de Dados
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Arquivos em C
Arquivos em CArquivos em C
Arquivos em C
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Linguagem C 03 Estruturas De Decisao
Linguagem C 03 Estruturas De DecisaoLinguagem C 03 Estruturas De Decisao
Linguagem C 03 Estruturas De Decisao
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Arquitetura 6 exercícios
Arquitetura 6   exercíciosArquitetura 6   exercícios
Arquitetura 6 exercícios
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 

Ähnlich wie Linguagem C - História, Características e Conceitos Básicos

Ähnlich wie Linguagem C - História, Características e Conceitos Básicos (20)

Ud2
Ud2Ud2
Ud2
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoes
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+c
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem c
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Linguagem_C.pdf
Linguagem_C.pdfLinguagem_C.pdf
Linguagem_C.pdf
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Aula 1
Aula 1Aula 1
Aula 1
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Infos algoritmo
Infos algoritmoInfos algoritmo
Infos algoritmo
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Apostila c
Apostila cApostila c
Apostila c
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Ud3
Ud3Ud3
Ud3
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducao
 

Mehr von Ricardo Liyushiro Chikasawa (15)

Apresentacao anteprojeto
Apresentacao anteprojetoApresentacao anteprojeto
Apresentacao anteprojeto
 
Gcc
GccGcc
Gcc
 
Universidade profissao
Universidade profissaoUniversidade profissao
Universidade profissao
 
Apostila Html
Apostila HtmlApostila Html
Apostila Html
 
Apostila Html
Apostila HtmlApostila Html
Apostila Html
 
ExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java AtualizadoExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java Atualizado
 
ExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java AtualizadoExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java Atualizado
 
Javatvdigital Mauricioleal
Javatvdigital MauriciolealJavatvdigital Mauricioleal
Javatvdigital Mauricioleal
 
Certificacao
CertificacaoCertificacao
Certificacao
 
Certificacao
CertificacaoCertificacao
Certificacao
 
Javacard Campus Party
Javacard Campus PartyJavacard Campus Party
Javacard Campus Party
 
Unoeste Reuniao Ap
Unoeste Reuniao ApUnoeste Reuniao Ap
Unoeste Reuniao Ap
 
OpenSolaris no Virtual box
OpenSolaris no Virtual boxOpenSolaris no Virtual box
OpenSolaris no Virtual box
 
OpenSolaris
OpenSolarisOpenSolaris
OpenSolaris
 
Secompp Opensolaris
Secompp OpensolarisSecompp Opensolaris
Secompp Opensolaris
 

Linguagem C - História, Características e Conceitos Básicos

  • 1. C Linguagem Programação C Sun Ricardo Liyushiro Chikasawa Rafael Stoffalette João
  • 2. Tópicos • 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 Linguagem C – LP 2011 2
  • 3. Tópicos • Binding • Compilador • Processo de Compilação • Ligação com Bibliotecas • Registro de Ativação • Otimização • Bibliografia Linguagem C – LP 2011 3
  • 4. Contexto Histórico • 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. Linguagem C – LP 2011 4
  • 5. Contexto Histórico Linguagem C – LP 2011 5
  • 6. Contexto Histórico Linguagem C – LP 2011 6
  • 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áquinasLP 2011 Linguagem C – 7
  • 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. Linguagem C – LP 2011 8
  • 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 Linguagem C – LP 2011 9
  • 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: Linguagem C – LP 2011 10
  • 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) Linguagem C – LP 2011 11
  • 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; Variável local x = 10; } void func2(void) { int x; x = -199; Variável local (não tem } Relação com anterior) Linguagem C – LP 2011 12
  • 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 global void func1(void); void main (void) { cont = 100; func1(); } Linguagem C – LP 2011 13
  • 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 // Arquivo 2 int x, y; extern int x, y; char ch; extern char ch; main (void) { : func22(void) { } x = y/10; } func1() { x = 123; Func23() { } y = 10; } 14 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; } Linguagem C – LP 2011 15
  • 16. Operadores • Operador Lógico • Operador Aritmético Linguagem C – LP 2011 16
  • 17. Tipos de Dados Linguagem C – LP 2011 17
  • 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 Linguagem C – LP 2011 18
  • 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 fori fim: mov %ebp, %esp /* resultado ja' esta' na pilha! */ pop %ebp ret Linguagem C – LP 2011 19
  • 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 Linguagem C – LP 2011 20
  • 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; ... Linguagem C – LP 2011 21
  • 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 Linguagem C – LP 2011 22
  • 23. Representação de Array Linguagem C – LP 2011 23
  • 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] Linguagem C – LP 2011 24
  • 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 Linguagem C – LP 2011 25
  • 26. Alocação de array na Pilha Linguagem C – LP 2011 26
  • 27. Structs Linguagem C – LP 2011 27
  • 28. Alocação Dinâmica de Memória int *ptr_a; ptr_a = malloc(sizeof(int)); ptr_a = 90; free(ptr_a); Linguagem C – LP 2011 28
  • 29. Estrutura de Controle de Fluxo • Comando de Seleção • Forma do comando if: • if(<condição>) <comando> • if(<condição>) <comando> else <comando> Linguagem C – LP 2011 29
  • 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>} Linguagem C – LP 2011 30
  • 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. Linguagem C – LP 2011 31
  • 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; } Linguagem C – LP 2011 32
  • 33. Escopo Estático • Definição do subprograma • Tempo de compilação • Texto do programa x x x y y w z z w x Bloco Monolítico Bloco Não Aninhados Bloco Aninhados Linguagem C – LP 2011 33
  • 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); } } Linguagem C – LP 2011 34
  • 35. Escopo Dinâmico • Chamada do subprograma • Tempo de execução • Fluxo de controle do programa sub() { int x=1; •Baixa eficiência sub1() •Baixa legibilidade { •Problemas Acesso escreva(x); •Menor Confiabilidade } sub2() { int x=3; sub1(); } sub2(); sub1(); } Linguagem C – LP 2011 35
  • 36. Compilador a=b+c*3 Tabela de Símbolos Análise Léxica # id info 1 a teste1.c 2 b Id1 = id2 + id3 * number 3 c = Análise Sintática id1 + Id2 * id3 Number Linguagem C – LP 2011 36
  • 37. Compilador = id1 + Análise Semântica Id2 * id3 Number = id1 + Id2 * id3 Intoreal(3) Linguagem C – LP 2011 37
  • 38. Compiladorgcc -fdump-tree-optimized <arquivo.c> = Otimização Código id1 + Intermediário Id2 * temp1 = id3 * 3.0 id3 Intoreal(3) id1 = id2 + temp1 Geração de Código Geração Código Alvo Intermediário MOV id3, R2 MUL #3.0, R2 temp1 = intoreal(3) MOV id2, R1 temp2 = id3 * temp1 ADD R2, R1 temp3 = id2 + temp2 MOV R1, id1 id1 = temp3 gcc -fdump-tree-gimple <arquivo.c> Linguagem C – LP 2011 5/23/11 38 38
  • 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. Linguagem C – LP 2011 39
  • 40. Código Otimizado temp1 = id3 * 3.0 id1 = id2 + temp1 gcc -fdump-tree-optimized <arquivo.c> Linguagem C – LP 2011 40
  • 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. Linguagem C – LP 2011 41
  • 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 Linguagem C – LP 2011 42
  • 43. Processo de Compilação hello.c Programa fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly hello.o Assembler Objeto Linker Linguagem C – LP 2011 43
  • 44. hello.c Programa fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly teste.o Assembler Objeto Linker Linguagem C – LP 2011 44
  • 45. hello.c Programa fonte hello.i pre-processador Programa fonte “expandido” hello.s Compilador Programa Assembly teste.o Assembler Objeto Linker Linguagem C – LP 2011 45
  • 46. hello.c Programa fonte hello.i Arquivo .o em pre-processador Programa fonte Linguagem “expandido” De máquina hello.s Compilador Programa Assembly hello.o' Assembler Objeto Linker Visualizar o objeto Linguagem C – LP 2011 46
  • 47. hello.c Arquivo .o em Programa fonte Linguagem De máquina hello.i pre-processador Programa fonte “expandido” Executável hello.s Compilador Programa Assembly hello.o Assembler Objeto Linker Linguagem C – LP 2011 47
  • 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 Linguagem C – LP 2011 48
  • 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 Linguagem C – LP 2011 49
  • 50. Processo de Compilação • Pré-processador • Macro pode ser também utilizadas passando valor • -DVAR=VALOR Linguagem C – LP 2011 50
  • 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 . Linguagem C – LP 2011 51
  • 52. Ligação com Bibliotecas hello.c bye.c (cc1,as) (cc1,as) libc.so hello.o bye.o Informações de relocação Linker (id) e tabela de símbolo Executável parcialmente p2 libc.so Ligado (em disco) Loder/Dynamic Linker Executável totalmente Ligado na memória Linguagem C – LP 2011 52
  • 53. Ligação com Bibliotecas hello.c bye.c (cc1,as) (cc1,as) hello.o bye.o Informações Linker (id) de relocação e tabela de símbolo Executável parcialmente p2 libhello.so Ligado (em disco) Loder/Dynamic Linker Executável totalmente Ligado na memória Linguagem C – LP 2011 53
  • 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> Linguagem C – LP 2011 54
  • 55. Registro de Ativação Linguagem C – LP 2011 55
  • 56. Acesso ao Registro de Ativação Linguagem C – LP 2011 56
  • 57. Exemplo de variável local Linguagem C – LP 2011 57
  • 58. Outro Exemplo Linguagem C – LP 2011 58
  • 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. 59 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 Linguagem C – LP 2011 60
  • 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 Linguagem C – LP 2011 61
  • 62. Exemplo de Otimização • -O0 (GCC) • -O1 (GCC) • -O2 (GCC) Linguagem C – LP 2011 62
  • 63. Exemplo de Otimização • -O3 (GCC) • -funroll-loops (GCC) • -Os (GCC) Linguagem C – LP 2011 63
  • 64. Exemplo de Otimização • -O0 (Intel) • -O1 (Intel) • -O2 (Intel) Linguagem C – LP 2011 64
  • 65. Exemplo de Otimização • -O3 (Intel) • -Os (Intel) Linguagem C – LP 2011 65
  • 66. Conclusão do Exemplo 4 3,5 3 2,5 2 INTEL GCC 1,5 1 0,5 0 O0 O1 O2 O3 Os Linguagem C – LP 2011 66
  • 67. Open MP • Programação Paralela • Suporta Multi-Plataforma • Memória Compartilhada Linguagem C – LP 2011 67
  • 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 Linguagem C – LP 2011 68
  • 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 Linguagem C – LP 2011 69