Académique Documents
Professionnel Documents
Culture Documents
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
Popularidade de C
Desde sua criao uma das linguagens mais usadas profissionalmente
ambiente comercial e acadmico
Popularidade de C
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
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
Background Histrico de C
C foi criada no (NJ)
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
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
10
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
11
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
Background Histrico de C
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
14
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
15
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!
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
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
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
19
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
20
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
Caractersticas de C
C uma linguagem criada por programadores para programadores
Procedural Modularizada (com funes) Cientfica Flexvel Case sensitive
22
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
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
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
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
26
Como Compilar?
E naquele outro sistema operacional?
Use por sua conta e risco! Existem ports como MinGW e Cygwin
27
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
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
29
Um Hello World em C
30
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
31
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
32
E/S em C
Mapeamento das streams padro
33
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
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
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
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
37
38
39
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
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
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
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
43
Tipos e Tamanhos
44
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
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
46
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
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.:
48
Constantes
Constantes so valores rotulados, como variveis, mas imutveis (somente leitura) durante toda a execuo do programa
Constantes
Uma constante pode ser usada em qualquer operao que no altere o valor da mesma
Exemplos com const
50
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
Constantes
As macros so expandidas pelo prprocessador
A ocorrncia do identificador substituda pela constante Exemplos com #define
52
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.
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
54
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
55
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
56
Operadores Bit-a-bit
No trecho de cdigo seguinte,
Atribuio
Valores constantes, resultados de chamadas de funes ou resultados de expresses podem ser armazenados em variveis usando o operador de atribuio (=)
58
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