SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Conhecendo ou relembrando C
         Vinícius Alves Hax
Baseado no material de Dave Marshall
          Hack Thursday
         Novembro de 2012
Engenheiro de Computação (FURG), Especialista em
Aplicações para Web (FURG)
Cursando Mestrado em Eng. de Computação
Analista de TI no C3/FURG
Empreendedor www.zetaops.com.br
Quem usa C?
Sistemas Operacionais
Computação de Alto Desempenho
Microcontroladores, Arduino
Jogos
CUDA e OpenCL (programação placas grácas)
BCPL (Basic Combined Programming Language) (66)

GET LIBHDR
LET START( ) = VALOF $ (
        FOR I = 1 TO 5 DO
                 WRITEF(%N! = %I 4 ∗N , I , FACT( I ) )
        RESULTIS 0
)$
AND FACT(N) = N = 0 − 1 , N ∗ FACT(N − 1 )
B: Ken Thompson e Dennis Ritchie (1969)
B = BCPL sem frescuras (precisava caber na memória)
C (1972): Melhorias em B, principalmente:
Structs
Endereçamento por byte
O que levou a ser popular:
Pequena
Tipagem fraca
Linguagem estruturada
Operações bit-a-bit
Implementação de ponteiros
C se tornou uma linguagem prossional por diversas razões:
   Construções de alto nível
   Suporta operações de baixo nível
   Produz programas ecientes
   Pode ser compilada em muitos tipos de arquiteturas
https://gist.github.com/4171628

#i n c l u d e    s t d i o . h
main ( t , _, a )
char       ∗a ;
{return       !0 t ? t 3?main ( − 79 , − 13 , a+main ( − 87,1 −_,
main ( − 86 , 0 , a+1 )+a ) ) : 1 , t_? main ( t +1, _, a ) : 3 , main ( − 94, −27+t , a
)t == 2 ?_13 ? main ( 2 , _+1, %s %d %dn ) : 9 : 1 6 : t 0?t −72?main (_,
t , @n '+ ,# '/ ∗ {}w+/w#c d n r /+ ,{} r / ∗ de }+ ,/ ∗ { ∗ + ,/w{%+,/w#q#n+,/#{ l ,+ ,/ n{n+
,/+#n+,/#;#q#n+,/+k #; ∗ + ,/ ' r : ' d ∗ ' 3 , } {w+K w 'K: '+} e # '; dq#' l q#'+d 'K#!/
+k#;q#' r }eKK#}w ' r }eKK{ n l ] '/#;# q#n '){)#}w ' ) { ) { n l ]'/+#n ' ; d} rw ' i ;# ) { n
 l ] ! / n{n # '; r{#w ' r nc { n l ] '/#{ l ,+ 'K { rw ' iK { ; [ { n l ] ' / w#q#
n ' wk nw ' iwk {KK{ n l ] ! / w{%' l##w#' i ; : { n l ] ' / ∗ { q#' l d ; r ' } { nlwb ! / ∗ de } ' c 
 ; ; { n l ' − {} rw ]'/+,}##' ∗ }# nc , ' , # nw] '/+ kd '+ e }+;
#' r d q#w ! n r ' / ' ) }+}{ r l #'{n ' ')# } '+}##(!!/  )
 : t −50?_==∗a ? p u t c h a r ( a [ 3 1 ] ) : main ( − 65 ,_, a +1): main ( ( ∗ a == ' / ' )+t , _, a 
+1 ):0  t ? main ( 2 , 2 , %s  ) : ∗ a==' / ' | | main ( 0 , main ( − 61 , ∗ a ,  ! ek ; dc 
i@bK ' ( q ) − [w]∗%n+r 3#l , { } :  nuwloca −O;m . vpbks , f x n t d C e g h i r y  ) , a +1);}
Obfuscated C Code Contest
http://reality.sgi.com/csp/iocc
Hello World!
https://gist.github.com/4171614
Tipos de dados em C:
Variáveis:

var_type l i s t   variables ;
int i , j ,k;
float x ,y ,z;
char ch ;
Saída formatada:

p r i n t f ( %c %f %d , ch , r e a l _ v a l , i n t _ v a l ) ;
Variáveis:
                  Globáis: Denidas fora de funções
       Estáticas: Mantém seu valor entre múltiplas chamadas

void    stat ();    /∗   prototype      fn   ∗/

main ( )
{   int  i;
f o r ( i =0; i 5;++ i )
              stat ();
}

stat () {
int     auto_var = 0 ;
static int            static_var = 0;
p r i n t f (  a u t o = %d , s t a t i c = %d n , auto_var , s t a t i c _ v a r ) ;
++auto_var ;
++s t a t i c _ v a r ;
}
Operações de incremento:

x++;
− y;
 −
i=i+2;
i+=2;
Igualdade: ==
   Diferença: !=
      if (i=j)
é válido. Cuidado!
Operadores lógicos:
    (AND)
     || (OR)
if (a  b)
    ....
    else
    ....
Operador ternário
 c=(ab)?a:b;
switch   ( letter )
           {
              case'A ' :
              case'E ' :
              case'I ':
              case'O ' :
              case'U ' :
                       n u m b e r o f v o w e l s ++;
                          break ;
              case   ' ':
                        n u m b e r o f s p a c e s ++;
                          break ;
              default :
                          n u m b e r o f c o n s t a n t s ++;
                          break   ;
          }
for (expressao1; expressao2; expressao3)
               comando;
         ou bloco de comandos
for   ( x =3; x 0; x −)
            {
              p r i n t f (  x=%dn , x ) ;
              }
for (;;)
           ;
for   ( x =0, y =4, z =4000; z ; z /=10)
int   x =3;
main ( )
 {
 while     ( x 0)
               { p r i n t f (  x=%dn , x ) ;
                                       x −;
               }
 }
do   {
              p r i n t f (  x=%dn , x − );
              }
while    ( x 0);
break  sai de um laço
continue  pula uma iteração de um laço
int tableofnumbers[50][50];
// Vetores começam em zero!
char    firstname [ 5 0 ] , lastname [ 5 0 ] , fullname [ 1 0 0 ] ;
f i r s t n a m e=  A r n o l d  ; / ∗ I l l e g a l ∗ /
l a s t n a m e=  S c h w a r z n e g g e r  ; / ∗ I l l e g a l ∗ /
f u l l n a m e= Mr+f i r s t n a m e
                            +l a s t n a m e ; / ∗ I l l e g a l ∗ /
Como é armazenada uma string?
float   findaverage (          float a,         float     b)
          {     float     average ;
            a v e r a g e =(a+b ) / 2 ;
               return   ( average ) ;
          }
main ( )
           {
               float     a =5,b=15 , r e s u l t ;
               r e s u l t=f i n d a v e r a g e ( a , b ) ;
               p r i n t f (  a v e r a g e=%f n , r e s u l t ) ;
           }
Exercício 1: Descobrir quantas letras A, B ou C existem em
                        uma string.
struct   gun
          {
          char name [ 5 0 ] ;
          int magazinesize ;
          float calibre ;
          };
struct   gun a r n i e s ;
struct   gun a r n i e s ={ U z i  , 3 0 , 7 } ;
typedef s t r u c t gun
        {
        char name [ 5 0 ] ;
        int magazinesize ;
        float calibre ;
              } agun ;
agun a r n i e s ={ U z i  , 3 0 , 7 } ;
a r n i e s g u n s [ 5 0 ] . c a l i b r e =100;
Casting

i n t integernumber ;
f l o a t floatnumber =9.87;
i n t e g e r n u m b e r =( i n t ) f l o a t n u m b e r ;
Ponteiros são uma parte fundamental do C. Usar C sem
ponteiros é perder boa parte do poder e exibilidade que a
linguagem permite. O segredo de usar C é usar ponteiros.
Por que ponteiros são importantes?
É a única maneira de expressar certas computações
Produz código compacto e eciente
Provê uma ferramenta poderosa
               C usa ponteiros com:
Arrays
Estruturas
Funções
- Retorna o endereço de uma variável
* - Retorna o conteúdo de um objeto apontado por um
                       ponteiro
                     int *pointer;
Ponteiros:
int   ∗ip ;
int   x;
i p = x ;
∗ ip = 100;

float      ∗flp , ∗ flq ;

∗ f l p = ∗ f l p + 10;

++∗ f l p ;
( ∗ f l p )++;
flq = flp ;
int   a [10] , x ;
int   ∗ pa ;

pa = a [ 0 ] ;      / ∗ pa   pointer        to    address    of   a [0]   ∗/

x = ∗ pa ;
/∗ x = c o n t e n t s   of   pa ( a [ 0 ]    in    this   c a s e ) ∗/
int ∗ip ;
ip = ( int   ∗ ) m a l l o c (100 ∗   sizeof ( int ));
Exercício 2: Denir o tipo de dados número complexo. Fazer
 uma função que dado dois números complexos, retorne um
          número complexo com a soma de ambos.
Referências:
http://www.cs.cf.ac.uk/Dave/C/
http://en.wikipedia.org/wiki/BCPL
http://en.wikipedia.org/wiki/B_
%28programming_language%29
http://en.wikipedia.org/wiki/C_
%28programming_language%29
Powered by:
            Latex
https://gist.github.com/4071299

Mais conteúdo relacionado

Mais procurados (19)

Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Ling c
Ling cLing c
Ling c
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
Gabarito funcoes
Gabarito funcoesGabarito funcoes
Gabarito funcoes
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Lista de exercícios XIV Python para Zumbis
Lista de exercícios XIV Python para ZumbisLista de exercícios XIV Python para Zumbis
Lista de exercícios XIV Python para Zumbis
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Aula 2
Aula 2Aula 2
Aula 2
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 

Semelhante a Conhecendo ou relembrando C

Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05profwtelles
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funçõesCarla Lee
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Algoritmos em c #1
Algoritmos em c #1Algoritmos em c #1
Algoritmos em c #1Stark2009
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoriaRicardo Bolanho
 
Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Isaac Barros
 
Algoritmo e lógica de programação - aula 5
Algoritmo e lógica de programação - aula 5Algoritmo e lógica de programação - aula 5
Algoritmo e lógica de programação - aula 5engenhariadecomputacao
 
unidade04-c3-handout.pdf
unidade04-c3-handout.pdfunidade04-c3-handout.pdf
unidade04-c3-handout.pdfAlexSouza974126
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptxwilliam Sarti José
 
Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2engenhariadecomputacao
 

Semelhante a Conhecendo ou relembrando C (20)

Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funções
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Python 02
Python 02Python 02
Python 02
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Algoritmos em c #1
Algoritmos em c #1Algoritmos em c #1
Algoritmos em c #1
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
 
Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1
 
Algoritmo e lógica de programação - aula 5
Algoritmo e lógica de programação - aula 5Algoritmo e lógica de programação - aula 5
Algoritmo e lógica de programação - aula 5
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Java4
Java4Java4
Java4
 
unidade04-c3-handout.pdf
unidade04-c3-handout.pdfunidade04-c3-handout.pdf
unidade04-c3-handout.pdf
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx
 
Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2
 

Mais de Vinícius Hax

História da computação - Parte 1 de 2 - Do princípio até 1936
História da computação - Parte 1 de 2 - Do princípio até 1936História da computação - Parte 1 de 2 - Do princípio até 1936
História da computação - Parte 1 de 2 - Do princípio até 1936Vinícius Hax
 
Do Zero ao YouTube em menos de 10 softwares livres
Do Zero ao YouTube em menos de 10 softwares livresDo Zero ao YouTube em menos de 10 softwares livres
Do Zero ao YouTube em menos de 10 softwares livresVinícius Hax
 
Uso de Software Livre e alternativas open source
Uso de Software Livre e alternativas open sourceUso de Software Livre e alternativas open source
Uso de Software Livre e alternativas open sourceVinícius Hax
 
E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?Vinícius Hax
 
Software Livre e Star Wars
Software Livre e Star WarsSoftware Livre e Star Wars
Software Livre e Star WarsVinícius Hax
 
Software Livre e Star Wars
Software Livre e Star WarsSoftware Livre e Star Wars
Software Livre e Star WarsVinícius Hax
 
30 anos da Free Software Foundation
30 anos da Free Software Foundation30 anos da Free Software Foundation
30 anos da Free Software FoundationVinícius Hax
 
E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?Vinícius Hax
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIVinícius Hax
 
Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IVinícius Hax
 
Como ficar milionário, só que ao contrário!
Como ficar milionário, só que ao contrário!Como ficar milionário, só que ao contrário!
Como ficar milionário, só que ao contrário!Vinícius Hax
 
Software Livre na Vida Científica e Acadêmica
Software Livre na Vida Científica e AcadêmicaSoftware Livre na Vida Científica e Acadêmica
Software Livre na Vida Científica e AcadêmicaVinícius Hax
 
Por que usar Software Livre afinal?
Por que usar Software Livre afinal?Por que usar Software Livre afinal?
Por que usar Software Livre afinal?Vinícius Hax
 
Padrões IETF para IP em dispositivos de baixa potência
Padrões IETF para IP em dispositivos de baixa potênciaPadrões IETF para IP em dispositivos de baixa potência
Padrões IETF para IP em dispositivos de baixa potênciaVinícius Hax
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 
Instalação de softwares em sistemas baseados no Debian
Instalação de softwares em sistemas baseados no DebianInstalação de softwares em sistemas baseados no Debian
Instalação de softwares em sistemas baseados no DebianVinícius Hax
 
2025 - O ano do Linux no Desktop?
2025 - O ano do Linux no Desktop?2025 - O ano do Linux no Desktop?
2025 - O ano do Linux no Desktop?Vinícius Hax
 

Mais de Vinícius Hax (17)

História da computação - Parte 1 de 2 - Do princípio até 1936
História da computação - Parte 1 de 2 - Do princípio até 1936História da computação - Parte 1 de 2 - Do princípio até 1936
História da computação - Parte 1 de 2 - Do princípio até 1936
 
Do Zero ao YouTube em menos de 10 softwares livres
Do Zero ao YouTube em menos de 10 softwares livresDo Zero ao YouTube em menos de 10 softwares livres
Do Zero ao YouTube em menos de 10 softwares livres
 
Uso de Software Livre e alternativas open source
Uso de Software Livre e alternativas open sourceUso de Software Livre e alternativas open source
Uso de Software Livre e alternativas open source
 
E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?
 
Software Livre e Star Wars
Software Livre e Star WarsSoftware Livre e Star Wars
Software Livre e Star Wars
 
Software Livre e Star Wars
Software Livre e Star WarsSoftware Livre e Star Wars
Software Livre e Star Wars
 
30 anos da Free Software Foundation
30 anos da Free Software Foundation30 anos da Free Software Foundation
30 anos da Free Software Foundation
 
E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?E agora o que faço eu da vida sem você (faculdade)?
E agora o que faço eu da vida sem você (faculdade)?
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte II
 
Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte I
 
Como ficar milionário, só que ao contrário!
Como ficar milionário, só que ao contrário!Como ficar milionário, só que ao contrário!
Como ficar milionário, só que ao contrário!
 
Software Livre na Vida Científica e Acadêmica
Software Livre na Vida Científica e AcadêmicaSoftware Livre na Vida Científica e Acadêmica
Software Livre na Vida Científica e Acadêmica
 
Por que usar Software Livre afinal?
Por que usar Software Livre afinal?Por que usar Software Livre afinal?
Por que usar Software Livre afinal?
 
Padrões IETF para IP em dispositivos de baixa potência
Padrões IETF para IP em dispositivos de baixa potênciaPadrões IETF para IP em dispositivos de baixa potência
Padrões IETF para IP em dispositivos de baixa potência
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Instalação de softwares em sistemas baseados no Debian
Instalação de softwares em sistemas baseados no DebianInstalação de softwares em sistemas baseados no Debian
Instalação de softwares em sistemas baseados no Debian
 
2025 - O ano do Linux no Desktop?
2025 - O ano do Linux no Desktop?2025 - O ano do Linux no Desktop?
2025 - O ano do Linux no Desktop?
 

Conhecendo ou relembrando C

  • 1. Conhecendo ou relembrando C Vinícius Alves Hax Baseado no material de Dave Marshall Hack Thursday Novembro de 2012
  • 2. Engenheiro de Computação (FURG), Especialista em Aplicações para Web (FURG) Cursando Mestrado em Eng. de Computação Analista de TI no C3/FURG Empreendedor www.zetaops.com.br
  • 4. Sistemas Operacionais Computação de Alto Desempenho Microcontroladores, Arduino Jogos CUDA e OpenCL (programação placas grácas)
  • 5. BCPL (Basic Combined Programming Language) (66) GET LIBHDR LET START( ) = VALOF $ ( FOR I = 1 TO 5 DO WRITEF(%N! = %I 4 ∗N , I , FACT( I ) ) RESULTIS 0 )$ AND FACT(N) = N = 0 − 1 , N ∗ FACT(N − 1 )
  • 6. B: Ken Thompson e Dennis Ritchie (1969) B = BCPL sem frescuras (precisava caber na memória)
  • 7. C (1972): Melhorias em B, principalmente: Structs Endereçamento por byte
  • 8.
  • 9. O que levou a ser popular: Pequena Tipagem fraca Linguagem estruturada Operações bit-a-bit Implementação de ponteiros
  • 10. C se tornou uma linguagem prossional por diversas razões: Construções de alto nível Suporta operações de baixo nível Produz programas ecientes Pode ser compilada em muitos tipos de arquiteturas
  • 11. https://gist.github.com/4171628 #i n c l u d e s t d i o . h main ( t , _, a ) char ∗a ; {return !0 t ? t 3?main ( − 79 , − 13 , a+main ( − 87,1 −_, main ( − 86 , 0 , a+1 )+a ) ) : 1 , t_? main ( t +1, _, a ) : 3 , main ( − 94, −27+t , a )t == 2 ?_13 ? main ( 2 , _+1, %s %d %dn ) : 9 : 1 6 : t 0?t −72?main (_, t , @n '+ ,# '/ ∗ {}w+/w#c d n r /+ ,{} r / ∗ de }+ ,/ ∗ { ∗ + ,/w{%+,/w#q#n+,/#{ l ,+ ,/ n{n+ ,/+#n+,/#;#q#n+,/+k #; ∗ + ,/ ' r : ' d ∗ ' 3 , } {w+K w 'K: '+} e # '; dq#' l q#'+d 'K#!/ +k#;q#' r }eKK#}w ' r }eKK{ n l ] '/#;# q#n '){)#}w ' ) { ) { n l ]'/+#n ' ; d} rw ' i ;# ) { n l ] ! / n{n # '; r{#w ' r nc { n l ] '/#{ l ,+ 'K { rw ' iK { ; [ { n l ] ' / w#q# n ' wk nw ' iwk {KK{ n l ] ! / w{%' l##w#' i ; : { n l ] ' / ∗ { q#' l d ; r ' } { nlwb ! / ∗ de } ' c ; ; { n l ' − {} rw ]'/+,}##' ∗ }# nc , ' , # nw] '/+ kd '+ e }+; #' r d q#w ! n r ' / ' ) }+}{ r l #'{n ' ')# } '+}##(!!/ ) : t −50?_==∗a ? p u t c h a r ( a [ 3 1 ] ) : main ( − 65 ,_, a +1): main ( ( ∗ a == ' / ' )+t , _, a +1 ):0 t ? main ( 2 , 2 , %s ) : ∗ a==' / ' | | main ( 0 , main ( − 61 , ∗ a , ! ek ; dc i@bK ' ( q ) − [w]∗%n+r 3#l , { } : nuwloca −O;m . vpbks , f x n t d C e g h i r y ) , a +1);}
  • 12. Obfuscated C Code Contest http://reality.sgi.com/csp/iocc
  • 14. Tipos de dados em C:
  • 15. Variáveis: var_type l i s t variables ; int i , j ,k; float x ,y ,z; char ch ;
  • 16. Saída formatada: p r i n t f ( %c %f %d , ch , r e a l _ v a l , i n t _ v a l ) ;
  • 17. Variáveis: Globáis: Denidas fora de funções Estáticas: Mantém seu valor entre múltiplas chamadas void stat (); /∗ prototype fn ∗/ main ( ) { int i; f o r ( i =0; i 5;++ i ) stat (); } stat () { int auto_var = 0 ; static int static_var = 0; p r i n t f ( a u t o = %d , s t a t i c = %d n , auto_var , s t a t i c _ v a r ) ; ++auto_var ; ++s t a t i c _ v a r ; }
  • 20. Igualdade: == Diferença: != if (i=j) é válido. Cuidado!
  • 21. Operadores lógicos: (AND) || (OR)
  • 22. if (a b) .... else ....
  • 24. switch ( letter ) { case'A ' : case'E ' : case'I ': case'O ' : case'U ' : n u m b e r o f v o w e l s ++; break ; case ' ': n u m b e r o f s p a c e s ++; break ; default : n u m b e r o f c o n s t a n t s ++; break ; }
  • 25. for (expressao1; expressao2; expressao3) comando; ou bloco de comandos
  • 26. for ( x =3; x 0; x −) { p r i n t f ( x=%dn , x ) ; }
  • 27. for (;;) ;
  • 28. for ( x =0, y =4, z =4000; z ; z /=10)
  • 29. int x =3; main ( ) { while ( x 0) { p r i n t f ( x=%dn , x ) ; x −; } }
  • 30. do { p r i n t f ( x=%dn , x − ); } while ( x 0);
  • 31. break sai de um laço continue pula uma iteração de um laço
  • 33. char firstname [ 5 0 ] , lastname [ 5 0 ] , fullname [ 1 0 0 ] ; f i r s t n a m e= A r n o l d ; / ∗ I l l e g a l ∗ / l a s t n a m e= S c h w a r z n e g g e r ; / ∗ I l l e g a l ∗ / f u l l n a m e= Mr+f i r s t n a m e +l a s t n a m e ; / ∗ I l l e g a l ∗ /
  • 34. Como é armazenada uma string?
  • 35. float findaverage ( float a, float b) { float average ; a v e r a g e =(a+b ) / 2 ; return ( average ) ; } main ( ) { float a =5,b=15 , r e s u l t ; r e s u l t=f i n d a v e r a g e ( a , b ) ; p r i n t f ( a v e r a g e=%f n , r e s u l t ) ; }
  • 36. Exercício 1: Descobrir quantas letras A, B ou C existem em uma string.
  • 37. struct gun { char name [ 5 0 ] ; int magazinesize ; float calibre ; }; struct gun a r n i e s ; struct gun a r n i e s ={ U z i , 3 0 , 7 } ;
  • 38. typedef s t r u c t gun { char name [ 5 0 ] ; int magazinesize ; float calibre ; } agun ; agun a r n i e s ={ U z i , 3 0 , 7 } ; a r n i e s g u n s [ 5 0 ] . c a l i b r e =100;
  • 39. Casting i n t integernumber ; f l o a t floatnumber =9.87; i n t e g e r n u m b e r =( i n t ) f l o a t n u m b e r ;
  • 40. Ponteiros são uma parte fundamental do C. Usar C sem ponteiros é perder boa parte do poder e exibilidade que a linguagem permite. O segredo de usar C é usar ponteiros.
  • 41. Por que ponteiros são importantes? É a única maneira de expressar certas computações Produz código compacto e eciente Provê uma ferramenta poderosa C usa ponteiros com: Arrays Estruturas Funções
  • 42. - Retorna o endereço de uma variável * - Retorna o conteúdo de um objeto apontado por um ponteiro int *pointer;
  • 44.
  • 45. int ∗ip ; int x; i p = x ; ∗ ip = 100; float ∗flp , ∗ flq ; ∗ f l p = ∗ f l p + 10; ++∗ f l p ; ( ∗ f l p )++; flq = flp ;
  • 46. int a [10] , x ; int ∗ pa ; pa = a [ 0 ] ; / ∗ pa pointer to address of a [0] ∗/ x = ∗ pa ; /∗ x = c o n t e n t s of pa ( a [ 0 ] in this c a s e ) ∗/
  • 47. int ∗ip ; ip = ( int ∗ ) m a l l o c (100 ∗ sizeof ( int ));
  • 48. Exercício 2: Denir o tipo de dados número complexo. Fazer uma função que dado dois números complexos, retorne um número complexo com a soma de ambos.
  • 50. Powered by: Latex https://gist.github.com/4071299