2. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
O que é C?
Linguagem de programação imperativa de
uso geral
Mé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
3. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Popularidade de C
Desde sua criação uma das linguagens mais
usadas profissionalmente
ambiente comercial e acadêmico
Prof. Fabio Alexandre Spanhol, M. Sc. 3
5. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
“Família” de C
Influenciou, direta ou indiretamente, várias 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. 5
6. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
“Família” de C
C foi influenciada e influenciou uma série de
linguagens
ALGOL 68
CPL (1963)
BCPL (1969)
B (1970)
C (1971)
C++ (1985) ANSI C
(1989)
Prof. Fabio Alexandre Spanhol, M. Sc. 6
7. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
C foi criada no (NJ)
Prof. Fabio Alexandre Spanhol, M. Sc. 7
Background Histórico de C
8. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
Originalmente 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
10. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
C deriva de CPL, BCPL, B e
ALGOL68
CPL origina-se da Cambridge
University, início dos anos 1960
BCPL é uma linguagem de sistemas
simples desenvolvida por Martin
Richards (1940-) em 1966
Prof. Fabio Alexandre Spanhol, M. Sc. 10
11. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
A 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
12. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Background Histórico de C
B 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
14. 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 creat
with an e."
15. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Padronização
Por mais de uma década
o padrão de C foi o livro
de Kernighan e Ritchie,
The C Programming
Language (1978), a
versão K&R C
Prof. Fabio Alexandre Spanhol, M. Sc. 15
16. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Padronização: ISO/ANSI
1983 – o American National Standards Institute
(ANSI) instituiu um comitê para padronizar a
linguagem
1989 - 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 atuais
Nosso curso será focado nessa versão!
1990 – torna-se padrão ISO, conhecida como C90
Prof. Fabio Alexandre Spanhol, M. Sc. 16
17. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Padronização: ISO/ANSI
1999 – 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
18. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivação
conhecimento 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 linguagens
padrã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
19. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivação
programador C é um profissional valorizado
em todo o mundo
có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
20. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivação
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
21. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Motivação
C 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
22. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Características de C
C é uma linguagem criada por programadores
para programadores
Procedural
Modularizada (com funções)
Científica
Flexível
Case sensitive
Prof. Fabio Alexandre Spanhol, M. Sc. 22
23. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Keywords de C
O padrão C89 tem 32
Prof. Fabio Alexandre Spanhol, M. Sc. 23
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
24. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Compiladores
Existem vários compiladores C, proprietários
e abertos, multiplataforma, etc.
GCC C
Clang
Visual-C
LabWindows/CVI
Intel ICC
Etc.
Prof. Fabio Alexandre Spanhol, M. Sc. 24
25. UNIVERSIDADE TECNOLÓGICA 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
26. 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
27. 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
28. 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
29. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Comentários
São ignorados pelo compilador
Utilizados 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
31. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E/S em C
Não existem comandos internos para
efetuar entrada e saída
Mas, 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
32. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
E/S em C
No modelo oriundo do Unix e adotado por C,
stream é uma fonte ou destino de dados
Três streams padrão estão disponíveis para o
programa:
stdin – entrada, normalmente teclado
stdout – saída, normalmente terminal de vídeo
stderr – erros, normalmente terminal de vídeo
Prof. Fabio Alexandre Spanhol, M. Sc. 32
34. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Saída em Terminais Texto
Saída básica feita com a função printf,
definida em stdio.h
Lê os dados de uma origem, formata e escreve em
stdout
O parâmetro 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
35. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printf
Caracteres 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
36. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printf
No parâmetro format podem ser usados
caracteres de conversão
% seguido de um caractere
Prof. Fabio Alexandre Spanhol, M. Sc. 36
caractere significado
c Caractere único
s string
d ou i inteiro
F ou f flutuante
E ou e Flutuante notação exponencial
o octal
X ou x hexadecimal
37. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função printf
Alguns 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 flutuantes
dígitos Define o tamanho do campo com o valor
0 Completa o campo com zeros ao invés de espaços
40. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Entrada em Terminais Texto
Entrada 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ória
O parâmetro format é uma string indicando como os
dados devem ser interpretados
O retorno é a quantidade de caracteres atribuídos ou um
EOF, em caso de erro
Prof. Fabio Alexandre Spanhol, M. Sc. 40
41. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Função scanf
No parâmetro format podem ser usados
caracteres de formatação
% seguido de um caractere
Prof. Fabio Alexandre Spanhol, M. Sc. 41
caractere significado
c Caractere único
s String SEM espaço
d ou i inteiro
F, f, G, g, E,
e, A, a
flutuante
u Inteiro sem sinal
o octal
x hexadecimal
42. UNIVERSIDADE TECNOLÓGICA 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
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
43. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Tamanhos de Inteiros
Dois qualificadores controlam o tamanho dos inteiros
short int – versão ‘curta’ de um int
long int – versão ‘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
45. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Sinalização de Inteiros
Qualificadores para inteiros
unsigned – interpreta o valor iniciando em 0
• unsigned aumenta a faixa de valores disponíveis, use
quando tiver certeza que não existirão negativos
signed – permite números negativos
*Cuidado: Misturar valores unsigned e signed
pode gerar bugs!
Prof. Fabio Alexandre Spanhol, M. Sc. 45
46. 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
47. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Variáveis
Variáveis são rótulos simbólicos para
posições de memória
Definidas por
Identificador
Tipo de dados
Em C, variáveis precisam ser
declaradas antes de serem
utilizadas! Prof. Fabio Alexandre Spanhol, M. Sc. 47
48. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Variáveis: Declaração
Podem 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
49. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Constantes
Constantes 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
50. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Constantes
Uma constante pode ser usada em qualquer
operação que não altere o valor da mesma
Exemplos com const
Prof. Fabio Alexandre Spanhol, M. Sc. 50
51. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Constantes
També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ória
Pode ser interessante para sistemas limitados
Prof. Fabio Alexandre Spanhol, M. Sc. 51
52. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Constantes
As macros são expandidas pelo pré-
processador
A ocorrência do identificador é substituída pela
constante
Exemplos com #define
Prof. Fabio Alexandre Spanhol, M. Sc. 52
53. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Aritméticos
Prof. Fabio Alexandre Spanhol, M. Sc. 53
Avaliam e retornam um valor numérico
Operador 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 ou
a++
-- Decremento. Versão pré e pós fixada ++a ou
a++
54. 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
55. 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
56. 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
57. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Operadores Bit-a-bit
No 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
58. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Atribuição
Valores 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
59. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Atribuição Combinada
O 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ível
a = a + b a += b
a = a - b a -= b
a = a * b a *= b
a = a / b a /= b
a = a % b a %= b
a = a & b a &= b
a = a || b a ||= b
...