walter fetter lages universidade federal do rio grande do sul escola de …fetter/eng04476/c.pdf ·...
TRANSCRIPT
![Page 1: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/1.jpg)
Linguagem CWalter Fetter [email protected]
Universidade Federal do Rio Grande do Sul
Escola de Engenharia
Departamento de Engenharia Elétrica
Microprocessadores II
Copyright (c) Walter Fetter Lages – p.1
![Page 2: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/2.jpg)
Introdução
• C foi criada e implementada por Dennis Ritchie,em um sistema operacional UNIX
• C foi criada a partir da linguagem B, derivada dalinguagem BCPL
• O sistema operacional UNIX system V foiimplementado em C
• Implementações bastante compatíveis• Portabilidade
• Padrão ANSI
Copyright (c) Walter Fetter Lages – p.2
![Page 3: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/3.jpg)
Características• C é um linguagem fracamente tipificada
• As variáveis precisam ser declaradas antes deserem utilizadas
• Conversões de tipos automáticas• Pouca verificação de erros em tempo de execução• Facilidades para manipulação de bits, bytes e
endereços• Apenas 32 palavras reservadas (padrão ANSI)
• É considerada uma linguagem estruturada• A rigor, não é, pois não permite a declaração
de sub-rotinas dentro de sub-rotinas• É uma linguagem para programadores
Copyright (c) Walter Fetter Lages – p.3
![Page 4: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/4.jpg)
Fundamentos
• C é sensível ao caso• Por convenção, variáveis e sub-rotinas são
declaradas em letras minúsculas, constantessão declaradas em letras maiúsculas
• O início do programa é na funçãomain()• Existe uma biblioteca padrão definida pela ANSI• Existe um pré-processador
Copyright (c) Walter Fetter Lages – p.4
![Page 5: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/5.jpg)
Palavras Reservadas• Tipos de dados:char int float double
void• Modificadores de tipos de dados:signed
unsigned long short• Classes de armazenamento:auto const
extern register static volatile• Declaração de tipos:enum struct union
typedef• Controle de fluxo:return if else for
do while continue switch casebreak default goto
• Operador:sizeof
Copyright (c) Walter Fetter Lages – p.5
![Page 6: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/6.jpg)
Identificadores
• Nomes de variáveis, funções, estruturas...• Definidas pelo programador• Um ou mais caracteres (letras números e
subscrito), sem espaços• O primeiro caractere deve ser uma letra ou
subscrito
Copyright (c) Walter Fetter Lages – p.6
![Page 7: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/7.jpg)
Declaração de Variáveis
int i;int i,j,l;short int si;short si;unsigned int ui;unsigned ui;double soma;unsigned long int ul;unsigned long ul;char c;unsigned char c;long double ld;
Copyright (c) Walter Fetter Lages – p.7
![Page 8: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/8.jpg)
Declaração de Variáveisconst long double um=1.0;register int i;volatile int i;static int i;extern char c;
• Variáveis declaradas fora de funções são variáveisglobais e são alocadas na área (segmento) dedados
• Variáveis declaradas dentro de funções sãovariáveis locais e são alocadas na pilha
• Variáveis podem ser declaradas no início de cadaescopo
• Variáveis podem ser inicializadas na declaraçãoCopyright (c) Walter Fetter Lages – p.8
![Page 9: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/9.jpg)
Exemplo de Declaração de Variáveis#include <stdio.h>
int sum; / * variavel global * /
int main(void)
{
int count; / * variavel local * /
sum=0; / * inicializacao * /
for(count=0;count < 10; count++) total(count);
printf("A soma e’: %d\n",sum);
return 0;
}
void total(int x)
{
sum=sum+x; / * x e’ um parametro * /
} Copyright (c) Walter Fetter Lages – p.9
![Page 10: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/10.jpg)
Caracteres EspeciaisCódigo Significado
\b retrocesso
\f alimentação de formulário
\n nova linha
\r retorno do carro
\t tab horizontal
\" aspas duplas
\’ aspas simples
\0 zero
\\ barra invertida
\v tab vertical
\a alerta
\o constante octal
\x constante hexadecimalCopyright (c) Walter Fetter Lages – p.10
![Page 11: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/11.jpg)
Operadores
• Aritméticos:+ - * / % ++ -- = += -=* = /=
• Relacionais:> < >= <= == !=• Lógicos: ! && ||
• bitwise: ˜ & | ˆ « »• Outros:() [] * & sizeof (type) , ?
: . ->
Copyright (c) Walter Fetter Lages – p.11
![Page 12: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/12.jpg)
Precedência de Operadores() [] . ->! ~ ++ -- - (type) * & sizeof* / %+ -<< >>< <= > >=== !=&^|&&||?= += -+ * = /=,
Copyright (c) Walter Fetter Lages – p.12
![Page 13: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/13.jpg)
Atribuição e Cast
• Em C o operador de atribuição (=) resulta o valorque foi atribuído
if(i=malloc(100)==NULL) return -1;• Para converter tipos de variáveis utiliza-secasts
int i=1;int j;double k;
j=i/3;k=i/3;k=i/3.0;k=(double)i/3;
Copyright (c) Walter Fetter Lages – p.13
![Page 14: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/14.jpg)
Ponteiros
• O operador& é utilizado para obter o endereço deuma variável, ou seja um ponteiro para a variável
• O operador* é utilizado para declarar umavariável do tipo ponteiro e para obter o dadoapontado por um ponteiro (derreferenciar oponteiro)
int i=4;int j;int * iptr;
iptr=&i;
j= * iptr+1;Copyright (c) Walter Fetter Lages – p.14
![Page 15: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/15.jpg)
Arrays
• Em C, osarrays tem como primeiro índice 0• Não existem matrizes, mas pode-se declarar
arrays dearrays• Não há verificação de limites• Uma string é umarray de caracteres terminado
pelo byte 0, ou o caractere\0• O nome doarray é um ponteiro para o seu início
Copyright (c) Walter Fetter Lages – p.15
![Page 16: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/16.jpg)
Exemplo Array
int amostras[10];double x[3]={0.0,1.0,2.0};int i;int * s;
amostras[1]=i;
i=amostras[1];i= * (amostras+1);
s=amostras;i= * amostras;i= * (s+1);i=s[1];
Copyright (c) Walter Fetter Lages – p.16
![Page 17: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/17.jpg)
Funções
• Funções devem ter um tipo de retorno eparâmetros de algum tipo
• O tipo de retorno e dos parâmetros pode servoid
• Funções cujo tipo de retorno não sejamvoiddevem terminar com o comando return.
int soma1(int a,int b)
{
int s;
s=a+b;
return s;
}Copyright (c) Walter Fetter Lages – p.17
![Page 18: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/18.jpg)
Passagem de Parâmetros
#include <stdio.h>
int main(int argc,char * argv[]){
int a;int b;int s;
a=atoi(argv[1]);b=atoi(argv[2]);s=soma1(a,b);printf("%d+%d=%d\n",a,b,s);return 0;
}Copyright (c) Walter Fetter Lages – p.18
![Page 19: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/19.jpg)
Passagem de Parâmetros
• Em C os parâmetros são sempre passados porvalor
• As alterações nos parâmetros feitas dentro dasfunções não se refletem fora
• Pode-se usar ponteiros para simular passagem deparâmetros por referência
void soma2(int a,int b,int * s){
* s=a+b;}
Copyright (c) Walter Fetter Lages – p.19
![Page 20: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/20.jpg)
Passagem de Parâmetros
#include <stdio.h>
int main(int argc,char * argv[]){
int a;int b;int s;
a=atoi(argv[1]);b=atoi(argv[2]);soma2(a,b,&s);printf("%d+%d=%d\n",a,b,s);return 0;
}Copyright (c) Walter Fetter Lages – p.20
![Page 21: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/21.jpg)
Protótipo de Função
• É a declaração da função, com tipo de retorno,nome e parâmetros
• Especifica a interface para uso da função
• É altamente recomendado que os protótipos dasfunções sejam declarados antes que elas sejamchamadas• Definindo a função antes da chamada• Declarando o protótipo antes da chamada• Declarando o protótipo em um arquivoheader• Caso contrário, o compilador assume que o
tipo de retorno e de todos os parâmetros éint
Copyright (c) Walter Fetter Lages – p.21
![Page 22: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/22.jpg)
Exemplos de Protótipos
int main(int argc,char * argv[]);int soma1(int a,int b);void soma2(int a,int b,int * s);
Copyright (c) Walter Fetter Lages – p.22
![Page 23: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/23.jpg)
Funçãomain()
int main(int argc,char * argv[])
• A funçãomain() recebe dois parâmetros eretorna um inteiro• Código de final de programa
• argc é o número de parâmetros passados nalinha de comando de execução do programa• O próprio nome do programa é contado como
um dos parâmetros• argv é umarray destrings
• Cada elemento doarray é um argumento dalinha de comando de execução do programa
Copyright (c) Walter Fetter Lages – p.23
![Page 24: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/24.jpg)
Comandoreturn
• return;• return x;
int soma(int a,int b){
return a+b;}
void erro(int codigo){
if(!codigo) return;printf("erro %d\n",codigo);
}
Copyright (c) Walter Fetter Lages – p.24
![Page 25: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/25.jpg)
Comandosif eelse
• if(condicao) comando; else comando;
• O else comando; é opcional• O comando pode ser um bloco de comandos• A condicao pode ser qualquer expressão que
resulte em zero ou não-zero
if(codigo==0) printf("Nao houve erro\n");
else printf("Erro %d\n",codigo);
if(codigo)
{
printf("Erro %d\n",codigo);
return -codigo;
}Copyright (c) Walter Fetter Lages – p.25
![Page 26: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/26.jpg)
Comandofor
• for(inicializacao;condicao;incremento) comando;
• inicializacao , condicao eincremento não precisam necessariamenteestar relacionadas, podem ser três comandosquaisquer
for(x=0;x < 100;x++) printf("%d\t",x);
for(;;){
c=getchar();if(c==0x2b) break;printf("%c",c ^ (’a’ ^ ’A’));
}Copyright (c) Walter Fetter Lages – p.26
![Page 27: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/27.jpg)
Comandowhile
• while(condicao) comando;
char c=’\0’;while(c!=0x2b) c=getchar();
char c=0;while(c!=0x2b){
c=getchar();printf("%c",c ^ (’a’ ^ ’A’));
}
Copyright (c) Walter Fetter Lages – p.27
![Page 28: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/28.jpg)
Comandodo while
• do comando while(condicao);
do c=getchar() while(c!=0x2b);
do{
c=getchar();printf("%c",c ^ (’a’ ^ ’A’));
} while(c!=0x2b);
Copyright (c) Walter Fetter Lages – p.28
![Page 29: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/29.jpg)
Comandocontinue
• continue;• continue pode ser utilizado com qualquer tipo
de laço:for , while oudo while
do
{
c=getchar();
if(c < ’a’ || c > ’z’) continue;
printf("%c",c ^ (’a’ ^ ’A’));
} while(c!=0x2b)
Copyright (c) Walter Fetter Lages – p.29
![Page 30: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/30.jpg)
Comandobreak
• break;• break pode ser utilizado com qualquer tipo de
laço: for , while oudo while• break também é utilizado para evitar
fall-through no comandoswitch
for(;;){
c=getchar();if(c==0x2b) break;printf("%c",c ^ (’a’ ^ ’A’));
}
Copyright (c) Walter Fetter Lages – p.30
![Page 31: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/31.jpg)
Comandosswitch , case edefault
• switch(variavel)
{
case constante1: sequencia_de_comandos;
case constante2: sequencia_de_comandos;
default: sequencia_de_comandos;
}
• Podem existir quantoscase forem necessários• O default é opcional e não precisa ser o último• Ocorrefall-through de umcase para outro• Usualmente se utiliza obreak para evitar
fall-throughCopyright (c) Walter Fetter Lages – p.31
![Page 32: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/32.jpg)
Comandosswitch , case edefault
switch(c)
{
case 0x2b: return;
case ’\0’:
case ’\n’:
case ’\t’:
printf("%c",c);
break;
default:
printf("%c", c ^ (’a’ ^ ’A’);
}
Copyright (c) Walter Fetter Lages – p.32
![Page 33: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/33.jpg)
Comandogoto
• goto rotulo;• Não é um comando necessário, sempre pode-se
fazer o mesmo sem utiliza-lo• Tende a tornar o programa confuso• Em geral é conveniente apenas para se sair de
muitos laços aninhados em uma condição de erro
Copyright (c) Walter Fetter Lages – p.33
![Page 34: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/34.jpg)
Comandogoto
for(;;){
for(;;){
while(1){
if(erro) goto fim;}
}}fim: printf("erro");
Copyright (c) Walter Fetter Lages – p.34
![Page 35: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/35.jpg)
Tipos Definidos pelo Usuário
• Estruturas• Campos de bit• Uniões• Enumerações
Copyright (c) Walter Fetter Lages – p.35
![Page 36: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/36.jpg)
Estruturas
• struct nome{
tipo variavel1;tipo variavel2;
} variavel;• Pode-se declarar a estrutura sem declarar a
variável• Se for declarada a variável, a estrutura não
precisa ter nome• Estruturas são passadas por valor para funções• Normalmente é passado um ponteiro para a
estruturaCopyright (c) Walter Fetter Lages – p.36
![Page 37: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/37.jpg)
Estruturas
struct FICHA{
char nome[30];double altura;
} dados;
struct FICHA cadastro[500];
dados.altura=1.8;cadastro[20].altura=1.8;imprime(dados);atualiza(&dados);atualiza(&cadastro[20]);
Copyright (c) Walter Fetter Lages – p.37
![Page 38: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/38.jpg)
Estruturas
void imprime(struct FICHA x){
printf("nome: %s\n",x.nome);printf("altura: %f\n",x.altura);
}
void atualiza(struct FICHA * x){
( * x).altura=1.8;x->altura=1.8;
}
Copyright (c) Walter Fetter Lages – p.38
![Page 39: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/39.jpg)
Campos de Bit
• struct nome
{
tipo variavel1:comprimento1;
tipo variavel2:comprimento2;
} variavel;
• Pode-se declarar o campo de bit sem declarar a variável
• Se for declarada a variável, o campo de bit precisa ter nome
• Pode-se declarar bits sem nome, apenas com o comprimento
• A implementação é dependente de máquina e compilador
• É mais comum utilizar máscaras ao invés de campos de bit
Copyright (c) Walter Fetter Lages – p.39
![Page 40: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/40.jpg)
Campos de Bit
struct ESTADO{
unsigned int ativo:1;unsigned int:4unsigned int pronto:1;
} dispositivo;
struct ESTADO disp2;
dispositivo.ativo=1;disp2.pronto=0;imprime(dispositivo);atualiza(&dispositivo);
Copyright (c) Walter Fetter Lages – p.40
![Page 41: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/41.jpg)
Campos de Bit
void imprime(struct ESTADO x){
if(x.ativo) printf("ativo\t");if(x.pronto) printf("pronto\n");
}
void atualiza(struct ESTADO * x){
( * x).ativo=1;x->pronto=0;
}
Copyright (c) Walter Fetter Lages – p.41
![Page 42: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/42.jpg)
Uniões
• union nome{
tipo variavel1;tipo variavel2;
} variavel;• Pode-se declarar a união sem declarar a variável• Se for declarada a união, a união não precisa ter
nome• Uniões são passadas por valor para funções• Normalmente é passado um ponteiro para a união
Copyright (c) Walter Fetter Lages – p.42
![Page 43: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/43.jpg)
Uniõesunion REG
{
struct
{
unsigned char l;
unsigned char h;
} byte;
unsigned short x;
unsigned int ex
} a;
union REG b, c, d;
a.byte.l=0x03;
a.byte.h=0x05;
a.x=0x0503;
a.ex=0x00000503;
Copyright (c) Walter Fetter Lages – p.43
![Page 44: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/44.jpg)
Enumerações
• enum nome{
constante1=valor,constante2=valor
} variavel;• Pode-se declarar a enumeração sem declarar a
variável• Se for declarada a variável, a enumeração não
precisa ter nome• Não é necessário definir um valor para cada
constante• Os valores devem ser inteiros
Copyright (c) Walter Fetter Lages – p.44
![Page 45: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/45.jpg)
Enumeraçõesenum MOEDA{
REAL,DOLAR,EURO=100,PESO,YEN
} dinheiro;
union MOEDA verba;
dinheiro=REAL;verba=DOLAR;imprime(dinheiro);atualiza(&verba);
Copyright (c) Walter Fetter Lages – p.45
![Page 46: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/46.jpg)
Enumerações
void imprime(union MOEDA x){
printf("Moeda: %d\n",x);}
void atualiza(union MOEDA * x){
* x=REAL;}
Copyright (c) Walter Fetter Lages – p.46
![Page 47: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/47.jpg)
typedef
• typedef tipo nome• Pode-se dar nomes aos tipos e com isto criar
novos tipos de dados semelhantes aos tipos dedados nativos
typedef double real;typedef enum MOEDA moeda;typedef union REG reg;
real a;moeda dinheiro;reg r;
Copyright (c) Walter Fetter Lages – p.47
![Page 48: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/48.jpg)
Operador ?
• condicao? expressao1:expressao2
• É uma forma abreviada deif(condicao)comando; else comando;
x=x > 10 ? 10:x;x=(x < 0)? 0:x;
Copyright (c) Walter Fetter Lages – p.48
![Page 49: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/49.jpg)
Formas Abreviadas
i++;i--;i+=10;i-=10;i * =10;i/=10;i=j=5;
Copyright (c) Walter Fetter Lages – p.49
![Page 50: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/50.jpg)
Operador ,
• O operador, é um separador de comandos,enquanto; é um terminador de comandos
• O lado esquerdo do operador, sempre tem ovalorvoid , de forma que o valor da expressãocompleta é o valor da expressão do lado direitodo operador,
for(x=0,y=0;x < 10 && y < 20;x++,y+=3)printf("%d %d\n",x,y);
x=(y=3,y+1);
Copyright (c) Walter Fetter Lages – p.50
![Page 51: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/51.jpg)
Préprocessador• Comandos executados em tempo de compilação e
não em tempo de execução
#if expressao#ifdef identificador#ifndef identificador#else#elif expressao#endif#include <arquivo>#define identificador string#undef identificador#line numero [arquivo]#error mensagem#pragma nome
Copyright (c) Walter Fetter Lages – p.51
![Page 52: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/52.jpg)
Programas Multi-Módulos• Programas grandes são organizados em diversos
módulos• Um módulo é a unidade mínima de linkagem• Cada módulo é compilado separadamente dos
demais• Cada arquivo.c compilado torna-se um módulo• Módulos passíveis de reutilização são usualmente
agrupados em bibliotecas• Arquivosheader são utilizados para definir os
protótipos das funções públicas dos módulos econstantes associadas à utilização destas funções
• Não existe uma associação direta entreheaders,módulos e bibliotecas
Copyright (c) Walter Fetter Lages – p.52
![Page 53: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/53.jpg)
Exemplo
• Arquivo soma.h
#ifndef _SOMA_H
#define _SOMA_H
extern int soma1(int a,int b);
#endif
• Arquivo soma.c
#include <soma.h>
int soma1(int a,int b)
{
int s;
s=a+b;
return s;
}Copyright (c) Walter Fetter Lages – p.53
![Page 54: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/54.jpg)
Exemplo• Arquivo teste.c
#include <stdio.h>
#include <soma.h>
int main(int argc,char * argv[])
{
int a;
int b;
int s;
a=atoi(argv[1]);
b=atoi(argv[2]);
s=soma1(a,b);
printf("%d+%d=%d\n",a,b,s);
return 0;
}Copyright (c) Walter Fetter Lages – p.54
![Page 55: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/55.jpg)
Exemplo• Arquivo Makefile
CFLAGS=-O2 -Wall
CINCLUDE=-I. -I${HOME}/include
CLIBDIR=-L${HOME}/lib
CLIBS=
CPPFLAGS=
CPPINCLUDE=-I${HOME}/include/cpp -I../include
CPPLIBDIR=-L../lib
CPPLIBS=
INCLUDE=${CINCLUDE} ${CPPINCLUDE}
FLAGS= ${CFLAGS} ${CPPFLAGS}
LIBDIR=${CLIBDIR} ${CPPLIBDIR}
LIBS=${CPPLIBS} ${CLIBS}
CMP= gcc
CMPFLAGS= ${FLAGS} ${INCLUDE}
LDFLAGS= ${LIBDIR} ${LIBS}
Copyright (c) Walter Fetter Lages – p.55
![Page 56: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/56.jpg)
Exemplo• Arquivo Makefile (Continuação)
all: teste
teste: teste.o soma.o
${CMP} ${CMPFLAGS} -o $@ $^ ${LDFLAGS}
teste.o: teste.c soma.h
${CMP} ${CMPFLAGS} -c -o $@ $<
soma.o: soma.c soma.h
${CMP} ${CMPFLAGS} -c -o $@ $<
clean:
rm -f * ~ * .bak * .o
install:
distclean: clean
rm -f teste
Copyright (c) Walter Fetter Lages – p.56
![Page 57: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/57.jpg)
Outro Makefile
TARGET=teste
SRCS=$(TARGET).c soma.c
PREFIX=/usr/local
BINDIR=$(PREFIX)/bin
FLAGS=-Wall -g -MMD
INCLUDE=-I. -I$(HOME)/include
LIBDIR=-L$(HOME)/lib
LIBS=
CC=gcc
CFLAGS=$(FLAGS) $(INCLUDE)
LDFLAGS=$(LIBDIR) $(LIBS)
Copyright (c) Walter Fetter Lages – p.57
![Page 58: Walter Fetter Lages Universidade Federal do Rio Grande do Sul Escola de …fetter/eng04476/c.pdf · 2012-04-02 · • C é um linguagem fracamente tipificada ... • Facilidades](https://reader034.vdocuments.pub/reader034/viewer/2022052517/5c60d45609d3f2256a8c253d/html5/thumbnails/58.jpg)
Outro Makefile (continuação)all: $(TARGET)
$(TARGET): $(SRCS:.c=.o)
$(CC) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
-include $(SRCS:.c=.d)
clean:
rm -f * ~ * .bak * .o * .d
distclean: clean
rm -f $(TARGET)
install: $(TARGET)
install -m 755 $(TARGET) $(BINDIR)
uninstall:
rm -f $(BINDIR)/$(TARGET) Copyright (c) Walter Fetter Lages – p.58