UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
O que é C?Linguagem de programação imperativa de
uso geralMédio nível: recursos que são suficientemente
de baixo nível para enfrentar as mais exigentes tarefas de programação de sistemas
Prof. Fabio Alexandre Spanhol, M. Sc. 2
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Popularidade de CDesde sua criação uma das linguagens mais
usadas profissionalmenteambiente comercial e acadêmico
Prof. Fabio Alexandre Spanhol, M. Sc. 3
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Pop
ula
rid
ade
de
C
Prof. Fabio Alexandre Spanhol, M. Sc. 4
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
“Família” de CInfluenciou, direta ou indiretamente, várias outras
linguagensPython, Objective-C, Java, D, Go, C#, etc.C++ foi derivada inicialmente como um superconjunto de
C
Prof. Fabio Alexandre Spanhol, M. Sc. 5
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
“Família” de CC foi influenciada e influenciou uma série de
linguagensALGOL 68
CPL (1963)
BCPL (1969)
B (1970)C (1971)
C++ (1985) ANSI C(1989)
Prof. Fabio Alexandre Spanhol, M. Sc. 6
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
C foi criada no (NJ)
Prof. Fabio Alexandre Spanhol, M. Sc. 7
Background Histórico de C
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de COriginalmente foi chamada NB e
posteriormente C, sendo projetada e implementada por Dennis Ritchie (1941-2011) no então AT&T Bell Laboratories entre 1969-1973
Prof. Fabio Alexandre Spanhol, M. Sc. 8
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Prof. Fabio Alexandre Spanhol, M. Sc. 9
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de CC deriva de CPL, BCPL, B e
ALGOL68CPL origina-se da Cambridge
University, início dos anos 1960BCPL é uma linguagem de sistemas
simples desenvolvida por Martin Richards (1940-) em 1966
Prof. Fabio Alexandre Spanhol, M. Sc. 10
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de CA história de C está intimamente ligada ao do SO UNIX
O primeiro UNIX foi escrito em assembly (PDP-7)E a primeira linguagem de alto nível sob o UNIX foi a B, escrita por Ken Thompson (1943-)e baseada em BCPL
Prof. Fabio Alexandre Spanhol, M. Sc. 11
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de CB foi implementada e projetada
por Ken Thompson Nem B nem BCPL possuam tipo,
todos os dados eram tratados como palavras de máquina
Problemas motivaram a criação de uma nova linguagem
*Desde 2006 Thompson trabalha na Google, sendo co-criador de Go
Prof. Fabio Alexandre Spanhol, M. Sc. 12
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
Prof. Fabio Alexandre Spanhol, M. Sc. 13
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
Prof. Fabio Alexandre Spanhol, M. Sc. 14
Ken Thompson was once asked what he would do differently if he were redesigning the UNIX system. His reply: "I'd spell creatwith an e."
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PadronizaçãoPor mais de uma década
o padrão de C foi o livro de Kernighan e Ritchie, The C ProgrammingLanguage (1978), a versão K&R C
Prof. Fabio Alexandre Spanhol, M. Sc. 15
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Padronização: ISO/ANSI1983 – o American National Standards Institute
(ANSI) instituiu um comitê para padronizar a linguagem1989 - padronização finalizada, ANSI X3.159-1989,
conhecida como C89É maior base dos códigos escritos e versão suportada por
quase todos os compiladores atuaisNosso curso será focado nessa versão!
1990 – torna-se padrão ISO, conhecida como C90
Prof. Fabio Alexandre Spanhol, M. Sc. 16
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Padronização: ISO/ANSI1999 – padrão C99 adiciona funções inline, novos
tipos de dados (como complex), arrays de tamanho variável, comentários com //, etc.
Não é suportado por todos os compiladores e alguns, parcialmente
2011 – o padrão iniciado em 2007, conhecido como C1X, é publicado e passa a ser conhecido como C11
novas features, macros de tipo genérico, estruturas anônimas, suporte melhorado a Unicode, operações atômicas, multi-threading, compatibilidade melhorada com C++ e etc.
Prof. Fabio Alexandre Spanhol, M. Sc. 17
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivaçãoconhecimento prévio de C, embora não
indispensável, representa uma vantagem para quem está interessado em programar em C++ e Java
C é ideal para “turbinar” outras linguagenspadrão ANSI para C existe desde 1989
o código escrito neste padrão tem validade em qualquer ambiente compatível
Prof. Fabio Alexandre Spanhol, M. Sc. 18
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivaçãoprogramador C é um profissional valorizado
em todo o mundocódigo C existente representa um patrimônio de
muitos milhões de dólares• não pode ser simplesmente abandonado ou convertido
em outras linguagens• conversão exigirá o trabalho de profissionais com
excelente base em C
Prof. Fabio Alexandre Spanhol, M. Sc. 19
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
MotivaçãoA 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 TECNOLÓGICA FEDERAL DO PARANÁ
MotivaçãoC continua sendo a preferida
para o desenvolvimento de sistemas embarcados (embedded systems)
software que controla automóveis, fornos de microondas, aparelhos de Blu-Ray e outros dispositivos não-computacionais
Prof. Fabio Alexandre Spanhol, M. Sc. 21
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Características de CC é uma linguagem criada por programadores
para programadoresProceduralModularizada (com funções)CientíficaFlexívelCase sensitive
Prof. Fabio Alexandre Spanhol, M. Sc. 22
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Keywords de CO padrão C89 tem 32
Prof. Fabio Alexandre Spanhol, M. Sc. 23
autobreakcasecharconstcontinuedefaultdo
doubleelseenumexternfloatforgotoif
intlongregisterreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoidvolatilewhile
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
CompiladoresExistem vários compiladores C, proprietários
e abertos, multiplataforma, etc.GCC CClangVisual-CLabWindows/CVIIntel ICCEtc.
Prof. Fabio Alexandre Spanhol, M. Sc. 24
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
CompiladorVamos 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 Gohttp://gcc.gnu.org/
Prof. Fabio Alexandre Spanhol, M. Sc. 25
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Como Compilar?Na linha de comando (Linux-like)gcc arquivo.c –o arquivo
*inclui as etapas de pré-processamento, compilação, montagem e ligação**Sem o parâmetro -o, o padrão é gerar um executável
chamado a.out
Prof. Fabio Alexandre Spanhol, M. Sc. 26
UNIVERSIDADE TECNOLÓGICA 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 TECNOLÓGICA 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 TECNOLÓGICA FEDERAL DO PARANÁ
ComentáriosSão ignorados pelo compiladorUtilizados para documentar o código-fonte/* comentario de
varias linhas.*/
// para comentário de uma linha, a partir do padrão C99
Prof. Fabio Alexandre Spanhol, M. Sc. 29
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Um Hello World em C
Prof. Fabio Alexandre Spanhol, M. Sc. 30
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E/S em CNão existem comandos internos para
efetuar entrada e saídaMas, há a biblioteca padrão (C Standard
Library) stdio.h que fornece recursos para manipulação de E/S
Define macros, constantes, variáveis e dezenas de funções para manipulação de arquivos
• Conceito de stream de bytes
Prof. Fabio Alexandre Spanhol, M. Sc. 31
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E/S em CNo modelo oriundo do Unix e adotado por C,
stream é uma fonte ou destino de dadosTrês streams padrão estão disponíveis para o
programa: stdin – entrada, normalmente tecladostdout – saída, normalmente terminal de vídeostderr – erros, normalmente terminal de vídeo
Prof. Fabio Alexandre Spanhol, M. Sc. 32
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E/S em CMapeamento das streams padrão
Prof. Fabio Alexandre Spanhol, M. Sc. 33
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Saída em Terminais TextoSaída básica feita com a função printf,
definida em stdio.h
Lê os dados de uma origem, formata e escreve em stdoutO parâmetro format é uma string indicando como os
dados devem ser interpretadosO retorno é a quantidade de caracteres escritos ou um
valor negativo, em caso de erroProf. Fabio Alexandre Spanhol, M. Sc. 34
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printfCaracteres especiais (como quebra de linha)
devem ser incluídos na string format com sequências de escape: \c, sendo c um caractere
Prof. Fabio Alexandre Spanhol, M. Sc. 35
Sequência resultado\n nova linha\r retorno de carro\t tabulação horizontal\\ barra invertida\' apóstrofo\" aspas
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printfNo parâmetro format podem ser usados
caracteres de conversão% seguido de um caractere
Prof. Fabio Alexandre Spanhol, M. Sc. 36
caractere significadoc Caractere únicos stringd ou i inteiroF ou f flutuanteE ou e Flutuante notação exponencialo octalX ou x hexadecimal
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printfAlguns caracteres de conversão em format
aceitam sinalizadores que modificam o comportamento padrão
Prof. Fabio Alexandre Spanhol, M. Sc. 37
Flag Ação- Justificado à esquerda+ Justificado à direita. Precisão quando aplicado em flutuantesdígitos Define o tamanho do campo com o valor0 Completa o campo com zeros ao invés de espaços
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printf: RetornoExemplo 1
Prof. Fabio Alexandre Spanhol, M. Sc. 38
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printf: Formatação
Prof. Fabio Alexandre Spanhol, M. Sc. 39
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Entrada em Terminais TextoEntrada básica feita com a função scanf,
definida em stdio.h
Lê os dados de stdin, interpreta e armazena em uma
posição de memóriaO parâmetro format é uma string indicando como os
dados devem ser interpretadosO retorno é a quantidade de caracteres atribuídos ou um EOF, em caso de erro
Prof. Fabio Alexandre Spanhol, M. Sc. 40
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função scanfNo parâmetro format podem ser usados
caracteres de formatação% seguido de um caractere
Prof. Fabio Alexandre Spanhol, M. Sc. 41
caractere significadoc Caractere únicos String SEM espaçod ou i inteiroF, f, G, g, E,e, A, a
flutuante
u Inteiro sem sinalo octalx hexadecimal
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tipos de Dados em CSomente 5 tipos primitivos
char – um byte simples (8-bits) para armazenar um caractere ASCII int – valor inteiro, baseado no tamanho da palavra da
máquina (geralmente 32-bits)float – um ponto flutuante de precisão simples
(normalmente 32-bit, IEEE)double – um ponto flutuante de precisão dupla
(normalmente 64-bit, IEEE)void – valor “vazio”• Usado em retornos de funções e ponteiros genéricos
Prof. Fabio Alexandre Spanhol, M. Sc. 42
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tamanhos de InteirosDois qualificadores controlam o tamanho dos inteiros
short int – versão ‘curta’ de um intlong int – versão ‘longa’ de um int
Regrasshort int <= int <= long intshort int >= 16 bitsint >= 16 bitslong int >= 32 bits
Prof. Fabio Alexandre Spanhol, M. Sc. 43
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tipos e Tamanhos
Prof. Fabio Alexandre Spanhol, M. Sc. 44
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Sinalização de InteirosQualificadores para inteirosunsigned – interpreta o valor iniciando em 0• unsigned aumenta a faixa de valores disponíveis, use
quando tiver certeza que não existirão negativossigned – permite números negativos
*Cuidado: Misturar valores unsigned e signed pode gerar bugs!
Prof. Fabio Alexandre Spanhol, M. Sc. 45
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Booleanos em C?Não há um tipo booleano em C!
Booleanos são implementados e avaliados como valores inteiro
• TRUE = 1• FALSE = 0
Convenção• 0 = FALSE• Não-zero = TRUE
Prof. Fabio Alexandre Spanhol, M. Sc. 46
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
VariáveisVariáveis são rótulos simbólicos para
posições de memória
Definidas porIdentificadorTipo de dados
Em C, variáveis precisam ser declaradas antes de serem utilizadas!
Prof. Fabio Alexandre Spanhol, M. Sc. 47
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Variáveis: DeclaraçãoPodem ser declaradas fora da função main
ou depois de da abertura de um bloco (após o {)
Sintaxe:<tipo_dado> <lista_de_identificadores>
Ex.:
Prof. Fabio Alexandre Spanhol, M. Sc. 48
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
ConstantesConstantes são valores rotulados,
como variáveis, mas imutáveis (somente leitura) durante toda a execução do programa
Evite o uso de números mágicos, use constantes!
Podem ser criadas• 1) Qualificando variáveis com const• 2) Usando a diretiva #define
Prof. Fabio Alexandre Spanhol, M. Sc. 49
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
ConstantesUma constante pode ser usada em qualquer
operação que não altere o valor da mesmaExemplos com const
Prof. Fabio Alexandre Spanhol, M. Sc. 50
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
ConstantesTambém é possível usar a diretiva de pré-
processamento #define criando uma macro Use com cautela
• Macro substituição, não há tipagem• não podem ser referenciados diretamente depois• Não são acessíveis ao debbuger
Vantagem: menor espaço em memóriaPode ser interessante para sistemas limitados
Prof. Fabio Alexandre Spanhol, M. Sc. 51
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
ConstantesAs macros são expandidas pelo pré-
processadorA ocorrência do identificador é substituída pela constanteExemplos com #define
Prof. Fabio Alexandre Spanhol, M. Sc. 52
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Aritméticos
Prof. Fabio Alexandre Spanhol, M. Sc. 53
Avaliam e retornam um valor numéricoOperador Descrição Sintaxe+ Adição a + b
- Subtração a - b
* Multiplicação a * b
/ Divisão a / b
% Resto da divisão inteira (módulo) a % b
++ Incremento. Versão pré e pós fixada ++a oua++
-- Decremento. Versão pré e pós fixada ++a oua++
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Relacionais
Prof. Fabio Alexandre Spanhol, M. Sc. 54
Avaliam e retornam um valor booleano
Operador Descrição Sintaxe== Igual a a == b
!= Não igual a, diferente de a != b
> Maior que a > b
< Menor que a < b
>= Maior ou igual a a >= b
<= Menor ou igual a a <= b
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Lógicos
Prof. Fabio Alexandre Spanhol, M. Sc. 55
Avaliam e retornam um valor booleano
Operador Descrição Sintaxe! Negação lógica, NÃO !a
&& Conjunção lógica, E a && b
|| Disjunção lógica, OU a || b
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Bit-a-bit
Prof. Fabio Alexandre Spanhol, M. Sc. 56
Operam sobre os bits individuais do operando
Operador Descrição Sintaxe~ Negação lógica ~a
&& E lógico a & b
| Ou lógico a | b
^ Ou exclusivo (XOR) a ^ b
>> Deslocamento à direita a >> b
<< Deslocamento à esquerda a << b
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Bit-a-bitNo trecho de código seguinte,
a expressão a && b resulta 1 (valor lógico verdade) e a & b resulta 4
Prof. Fabio Alexandre Spanhol, M. Sc. 57
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
AtribuiçãoValores constantes, resultados de chamadas
de funções ou resultados de expressões podem ser armazenados em variáveis usando o operador de atribuição (=)
Prof. Fabio Alexandre Spanhol, M. Sc. 58
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Atribuição CombinadaO operador de atribuição pode ser combinado com
os operadores aritméticos e bit-a-bit, compactando a instrução
Prof. Fabio Alexandre Spanhol, M. Sc. 59
Instrução Substituição Possívela = a + b a += ba = a - b a -= ba = a * b a *= ba = a / b a /= ba = a % b a %= ba = a & b a &= ba = a || b a ||= b...