Vous êtes sur la page 1sur 59

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

O que C?
Linguagem de programao imperativa de uso geral
Mdio nvel: recursos que so suficientemente de baixo nvel para enfrentar as mais exigentes tarefas de programao de sistemas

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Popularidade de C
Desde sua criao uma das linguagens mais usadas profissionalmente
ambiente comercial e acadmico

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Popularidade de C

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Famlia de C
Influenciou, direta ou indiretamente, vrias outras linguagens
Python, Objective-C, Java, D, Go, C#, etc. C++ foi derivada inicialmente como um superconjunto de C

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Famlia de C
C foi influenciada e influenciou uma srie de CPL (1963) linguagens
ALGOL 68 BCPL (1969) B (1970) C (1971)

C++ (1985)
Prof. Fabio Alexandre Spanhol, M. Sc.

ANSI C (1989)
6

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C
C foi criada no (NJ)

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C
Originalmente foi chamada NB e posteriormente C, sendo projetada e implementada por Dennis Ritchie (1941-2011) no ento AT&T Bell Laboratories entre 1969-1973

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C
C deriva de CPL, BCPL, B e ALGOL68
CPL origina-se da Cambridge University, incio dos anos 1960 BCPL uma linguagem de sistemas simples desenvolvida por Martin Richards (1940-) em 1966

Prof. Fabio Alexandre Spanhol, M. Sc.

10

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C
A histria de C est intimamente ligada ao do SO UNIX
O primeiro UNIX foi escrito em assembly (PDP-7) E a primeira linguagem de alto nvel sob o UNIX foi a B, escrita por Ken Thompson (1943-)e baseada em BCPL

Prof. Fabio Alexandre Spanhol, M. Sc.

11

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C
B foi implementada e projetada por Ken Thompson
Nem B nem BCPL possuam tipo, todos os dados eram tratados como palavras de mquina Problemas motivaram a criao de uma nova linguagem *Desde 2006 Thompson trabalha na Google, sendo co-criador de Go
Prof. Fabio Alexandre Spanhol, M. Sc. 12

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Background Histrico de C

Prof. Fabio Alexandre Spanhol, M. Sc.

13

Ken Thompson was once Background Histrico de C asked what he would do differently if he were redesigning the UNIX system. His reply: "I'd spell creat with an e."
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Prof. Fabio Alexandre Spanhol, M. Sc.

14

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Padronizao
Por mais de uma dcada o padro de C foi o livro de Kernighan e Ritchie, The C Programming Language (1978), a verso K&R C

Prof. Fabio Alexandre Spanhol, M. Sc.

15

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Padronizao: ISO/ANSI
1983 o American National Standards Institute (ANSI) instituiu um comit para padronizar a linguagem 1989 - padronizao finalizada, ANSI X3.159-1989, conhecida como C89
maior base dos cdigos escritos e verso suportada por quase todos os compiladores atuais Nosso curso ser focado nessa verso!

1990 torna-se padro ISO, conhecida como C90


Prof. Fabio Alexandre Spanhol, M. Sc. 16

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Padronizao: ISO/ANSI
1999 padro C99 adiciona funes inline, novos tipos de dados (como complex), arrays de tamanho varivel, comentrios com //, etc.
No suportado por todos os compiladores e alguns, parcialmente

2011 o padro iniciado em 2007, conhecido como C1X, publicado e passa a ser conhecido como C11
novas features, macros de tipo genrico, estruturas annimas, suporte melhorado a Unicode, operaes atmicas, multi-threading, compatibilidade melhorada com C++ e etc.
Prof. Fabio Alexandre Spanhol, M. Sc.

17

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Motivao
conhecimento prvio de C, embora no indispensvel, representa uma vantagem para quem est interessado em programar em C++ e Java C ideal para turbinar outras linguagens padro ANSI para C existe desde 1989
o cdigo escrito neste padro tem validade em qualquer ambiente compatvel
Prof. Fabio Alexandre Spanhol, M. Sc. 18

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Motivao
programador C um profissional valorizado em todo o mundo
cdigo C existente representa um patrimnio de muitos milhes de dlares
no pode ser simplesmente abandonado ou convertido em outras linguagens converso exigir o trabalho de profissionais com excelente base em C

Prof. Fabio Alexandre Spanhol, M. Sc.

19

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Motivao
A API MS-Windows foi especificada originalmente em C O Kernel Linux implementado em C C est estreitamente relacionada com tudo que diz respeito ao mundo Unix

Prof. Fabio Alexandre Spanhol, M. Sc.

20

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Motivao
C continua sendo a preferida para o desenvolvimento de sistemas embarcados (embedded systems)
software que controla automveis, fornos de microondas, aparelhos de BluRay e outros dispositivos nocomputacionais
Prof. Fabio Alexandre Spanhol, M. Sc. 21

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Caractersticas de C
C uma linguagem criada por programadores para programadores
Procedural Modularizada (com funes) Cientfica Flexvel Case sensitive

Prof. Fabio Alexandre Spanhol, M. Sc.

22

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Keywords de C
O padro C89 tem 32
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
23

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Compiladores
Existem vrios compiladores C, proprietrios e abertos, multiplataforma, etc.
GCC C Clang Visual-C LabWindows/CVI Intel ICC Etc.
Prof. Fabio Alexandre Spanhol, M. Sc. 24

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Compilador
Vamos adotar o compilador GCC (Gnu Compiler Collection) C, do projeto GNU licenciado sob GPL
oferece front ends para C, C++, Objective-C, Fortran, Java, Ada e Go

http://gcc.gnu.org/
Prof. Fabio Alexandre Spanhol, M. Sc. 25

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Como Compilar?
Na linha de comando (Linux-like)
gcc arquivo.c o arquivo

*inclui as etapas de pr-processamento, compilao, montagem e ligao **Sem o parmetro -o, o padro gerar um executvel chamado a.out

Prof. Fabio Alexandre Spanhol, M. Sc.

26

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Como Compilar?
E naquele outro sistema operacional?
Use por sua conta e risco! Existem ports como MinGW e Cygwin

Prof. Fabio Alexandre Spanhol, M. Sc.

27

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

IDE?
Muitos!
Vim TextMate Code::Blocks Sublime Geany Aptana NetBeans MS-Visual Studio Eclipse SlickEdit Source Insight Etc.
Prof. Fabio Alexandre Spanhol, M. Sc. 28

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Comentrios
So ignorados pelo compilador Utilizados para documentar o cdigo-fonte
/* comentario de varias linhas. */ // para comentrio de uma linha, a partir do padro C99

Prof. Fabio Alexandre Spanhol, M. Sc.

29

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Um Hello World em C

Prof. Fabio Alexandre Spanhol, M. Sc.

30

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

E/S em C
No existem comandos internos para efetuar entrada e sada
Mas, h a biblioteca padro (C Standard Library) stdio.h que fornece recursos para manipulao de E/S Define macros, constantes, variveis e dezenas de funes para manipulao de arquivos
Conceito de stream de bytes

Prof. Fabio Alexandre Spanhol, M. Sc.

31

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

E/S em C
No modelo oriundo do Unix e adotado por C, stream uma fonte ou destino de dados Trs streams padro esto disponveis para o programa:
stdin entrada, normalmente teclado stdout sada, normalmente terminal de vdeo stderr erros, normalmente terminal de vdeo

Prof. Fabio Alexandre Spanhol, M. Sc.

32

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

E/S em C
Mapeamento das streams padro

Prof. Fabio Alexandre Spanhol, M. Sc.

33

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Sada em Terminais Texto


Sada bsica feita com a funo printf, definida em stdio.h

L os dados de uma origem, formata e escreve em stdout O parmetro format uma string indicando como os dados devem ser interpretados O retorno a quantidade de caracteres escritos ou um valor negativo, em caso de erro
Prof. Fabio Alexandre Spanhol, M. Sc. 34

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo printf
Caracteres especiais (como quebra de linha) devem ser includos na string format com sequncias de escape: \c, sendo c um caractere Sequncia resultado
\n \r \t \\ \' \" nova linha retorno de carro tabulao horizontal barra invertida apstrofo aspas
35

Prof. Fabio Alexandre Spanhol, M. Sc.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo printf
No parmetro format podem ser usados caracteres de converso
% seguido de um caractere
caractere c s d ou i F ou f E ou e o X ou x significado Caractere nico string inteiro flutuante Flutuante notao exponencial octal hexadecimal
Prof. Fabio Alexandre Spanhol, M. Sc. 36

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo printf
Alguns caracteres de converso em format aceitam sinalizadores que modificam o comportamento padro
Flag + . dgitos 0 Ao Justificado esquerda Justificado direita Preciso quando aplicado em flutuantes Define o tamanho do campo com o valor Completa o campo com zeros ao invs de espaos

Prof. Fabio Alexandre Spanhol, M. Sc.

37

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo printf: Retorno


Exemplo 1

Prof. Fabio Alexandre Spanhol, M. Sc.

38

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo printf: Formatao

Prof. Fabio Alexandre Spanhol, M. Sc.

39

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Entrada em Terminais Texto


Entrada bsica feita com a funo scanf, definida em stdio.h

L os dados de stdin, interpreta e armazena em uma posio de memria O parmetro format uma string indicando como os dados devem ser interpretados O retorno a quantidade de caracteres atribudos ou um EOF, em caso de erro
Prof. Fabio Alexandre Spanhol, M. Sc. 40

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Funo scanf
No parmetro format podem ser usados caracteres de formatao
% seguido de um caractere
caractere c s d ou i F, f, G, g, E, e, A, a u o x significado Caractere nico String SEM espao inteiro flutuante Inteiro sem sinal octal hexadecimal Prof. Fabio Alexandre Spanhol, M. Sc.
41

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Tipos de Dados em C
Somente 5 tipos primitivos
char um byte simples (8-bits) para armazenar um caractere ASCII int valor inteiro, baseado no tamanho da palavra da mquina (geralmente 32-bits) float um ponto flutuante de preciso simples (normalmente 32-bit, IEEE) double um ponto flutuante de preciso dupla (normalmente 64-bit, IEEE) void valor vazio
Usado em retornos de funes e ponteiros genricos
Prof. Fabio Alexandre Spanhol, M. Sc. 42

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Tamanhos de Inteiros
Dois qualificadores controlam o tamanho dos inteiros
short int verso curta de um int long int verso longa de um int

Regras
short int <= int <= long int short int >= 16 bits int >= 16 bits long int >= 32 bits

Prof. Fabio Alexandre Spanhol, M. Sc.

43

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Tipos e Tamanhos

Prof. Fabio Alexandre Spanhol, M. Sc.

44

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Sinalizao de Inteiros
Qualificadores para inteiros
unsigned interpreta o valor iniciando em 0
unsigned aumenta a faixa de valores disponveis, use quando tiver certeza que no existiro negativos

signed permite nmeros negativos

*Cuidado: Misturar valores unsigned e signed pode gerar bugs!


Prof. Fabio Alexandre Spanhol, M. Sc. 45

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Booleanos em C?
No h um tipo booleano em C!
Booleanos so implementados e avaliados como valores inteiro
TRUE = 1 FALSE = 0

Conveno
0 = FALSE No-zero = TRUE

Prof. Fabio Alexandre Spanhol, M. Sc.

46

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Variveis
Variveis so rtulos simblicos para posies de memria Definidas por
Identificador Tipo de dados

Em C, variveis precisam ser declaradas antes de serem utilizadas! Prof. Fabio Alexandre Spanhol, M. Sc.

47

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Variveis: Declarao
Podem ser declaradas fora da funo main ou depois de da abertura de um bloco (aps o {)
Sintaxe:<tipo_dado> <lista_de_identificadores>

Ex.:

Prof. Fabio Alexandre Spanhol, M. Sc.

48

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Constantes
Constantes so valores rotulados, como variveis, mas imutveis (somente leitura) durante toda a execuo do programa

Evite o uso de nmeros mgicos, use constantes! Podem ser criadas


1) Qualificando variveis com const 2) Usando a diretiva #define
Prof. Fabio Alexandre Spanhol, M. Sc. 49

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Constantes
Uma constante pode ser usada em qualquer operao que no altere o valor da mesma
Exemplos com const

Prof. Fabio Alexandre Spanhol, M. Sc.

50

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Constantes
Tambm possvel usar a diretiva de prprocessamento #define criando uma macro Use com cautela
Macro substituio, no h tipagem no podem ser referenciados diretamente depois No so acessveis ao debbuger

Vantagem: menor espao em memria


Pode ser interessante para sistemas limitados
Prof. Fabio Alexandre Spanhol, M. Sc. 51

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Constantes
As macros so expandidas pelo prprocessador
A ocorrncia do identificador substituda pela constante Exemplos com #define

Prof. Fabio Alexandre Spanhol, M. Sc.

52

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Operadores Aritmticos
Avaliam e retornam um valor numrico
Operador + * / % ++ -Descrio Adio Subtrao Multiplicao Diviso Resto da diviso inteira (mdulo) Incremento. Verso pr e ps fixada Decremento. Verso pr e ps fixada
Prof. Fabio Alexandre Spanhol, M. Sc.

Sintaxe a + b a - b a * b a / b a % b ++a ou a++ ++a ou a++


53

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Operadores Relacionais
Avaliam e retornam um valor booleano
Operador == != > < >= <= Descrio Igual a No igual a, diferente de Maior que Menor que Maior ou igual a Menor ou igual a Sintaxe a == b a != b a > b a < b a >= b a <= b

Prof. Fabio Alexandre Spanhol, M. Sc.

54

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Operadores Lgicos
Avaliam e retornam um valor booleano
Operador ! && || Descrio Negao lgica, NO Conjuno lgica, E Disjuno lgica, OU Sintaxe !a a && b a || b

Prof. Fabio Alexandre Spanhol, M. Sc.

55

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Operadores Bit-a-bit
Operam sobre os bits individuais do operando
Operador ~ && | ^ >> << Descrio Negao lgica E lgico Ou lgico Ou exclusivo (XOR) Deslocamento direita Deslocamento esquerda Sintaxe ~a a & b a | b a ^ b a >> b a << b

Prof. Fabio Alexandre Spanhol, M. Sc.

56

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Operadores Bit-a-bit
No trecho de cdigo seguinte,

a expresso a && b resulta 1 (valor lgico verdade) e a & b resulta 4


Prof. Fabio Alexandre Spanhol, M. Sc. 57

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Atribuio
Valores constantes, resultados de chamadas de funes ou resultados de expresses podem ser armazenados em variveis usando o operador de atribuio (=)

Prof. Fabio Alexandre Spanhol, M. Sc.

58

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Atribuio Combinada
O operador de atribuio pode ser combinado com os operadores aritmticos e bit-a-bit, compactando a instruo Instruo Substituio Possvel
a = a + b a = a - b a = a * b a = a / b a = a % b a = a & b a = a || b ...
Prof. Fabio Alexandre Spanhol, M. Sc. 59

a += b a -= b a *= b a /= b a %= b a &= b a ||= b

Vous aimerez peut-être aussi