24
Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Embed Size (px)

Citation preview

Page 1: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Modificadores de tipos e Arquivos

Curso de aprofundamento na linguagem C

Page 2: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Visibilidade e acesso Modificadores de tipos

Modo de acesso Tempo de vida Espaço de endereçamento

Classes de armazenamento Qualificadores de tipos

Page 3: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Classes de armazenamento Automatic (auto) Static Register Typedef Extern

Page 4: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Automatic Variáveis de escopo local Armazenamento na pilha Tipo default

Page 5: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Static Espaço de endereçamento estático

Pode ser acessado a qualquer momento no programa

Variáveis globais Modifica a classe de armazenamento Restrição de visualização

Page 6: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Static Pode ser aplicado a variáveis locais Variáveis locais com

armazenamento estático transformam-se em variáveis globais com visibilidade local

Page 7: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Static Pode ser aplicado a funções e

variáveis globais Restringe a visualização ao arquivo

fonte (.c)

Page 8: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Extern Classe de armazenamento externa Endereços desconhecidos em tempo

de compilação Resolvidas em tempo de link Declaração de globais inicializadas

externamente Pode ser utilizado em funções

Page 9: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Register Variáveis com armazenamento em

registradores Armazenamento sugerido Utilizada para otimizar laços Máquinas RISC Desuso por otimização

Page 10: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

typedef Não é considerado um modificador

de classe de armazenamento nos compiladores modernos

Alias para tipos Declarações menores Aumento de portabilidade entre

sistemas

Page 11: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Qualificadores de tipo Influem no modo de acesso Restrições de modificação

const Restrições de otimização

volatile

Page 12: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

const Restringe a modificação de variáveis

com este qualificador Não podem sofrer atualização Regra diferente para ponteiros Inicialização junto com definição Garantia pelo compilador que o

conteúdo da variável não vai ser modificado

Page 13: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

const Área de memória read-only Modificação forçada leva a um

comportamento indefinido Pode ser aplicado a structs e unions Pode ser burlado e gerar erros de

execução Ver apostila

Page 14: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

volatile Restrição de otimização do

compilador Variáveis que podem ser acessadas

e modificadas por processos concorrentes

Acesso a IO mapeado em memória

Page 15: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

volatile/** Busy-wait function to read a byte from* device n.* check range of device number.* Wait until READY or ERROR* if no error, read byte, return it* otherwise reset error, return 0xffff*/unsigned int read_dev(unsigned devno){

struct devregs *dvp = DEVADDR + devno;

if(devno >= NDEVS) return(0xffff);

while((dvp->csr & (READY | ERROR)) == 0) ; /* NULL - wait till done */

if(dvp->csr & ERROR){ dvp->csr = RESET; return(0xffff); }

return((dvp->data) & 0xff);}

struct devregs{/* control & status */ unsigned short csr; /* data port */ unsigned short data;};

/* bit patterns in the csr */#define ERROR 0x1#define READY 0x2#define RESET 0x4

/* absolute address of the device */#define DEVADDR ((struct devregs *)0xffff0004)

/* number of such devices in system */#define NDEVS 4

Page 16: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

volatile Memória de hardware mapeada em

structstruct devregs{ unsigned short volatile csr; unsigned short const volatile data;};

volatile struct devregs{ unsigned short csr; unsigned short const data;} *device;

struct devregs{ unsigned short csr; unsigned short const data;};

volatile struct devregs *device;

Page 17: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

E/S baseada em arquivos Streams <stdio.h> Streams default

stdin stdout stderr

Page 18: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Operações com Arquivos Abertura/criação

Arquivos texto Arquivos binários

Leitura e Escrita Byte a byte Blocos Formatada

Acesso randômico/seqüencial

Page 19: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Abertura FILE *fopen(char *name, char *mode);

Modo R leitura W escrita A Concatenação B binário T texto (default)

Retorna NULL se falhar Checagem recomendada

Page 20: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Leitura e Escrita int fgetc(FILE *stream); int fputc(char c, FILE *stream); Char *fgets(char *s, int size, FILE

*stream); Int ungetc(int c, FILE*stream); Int fputs(const char *s, FILE

*stream);

Page 21: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Leitura e Escrita int fprintf(FILE *stream, const char

*format, ...); int fscanf(FILE *stream, const char

*format, ...);

Page 22: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Leitura e Escrita size_t fread(void *ptr, size_t size,

size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t

size, size_t nmemb, FILE *stream); int feof(FILE *stream);

Page 23: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Acesso randômico int fseek(FILE *stream, long offset,

int whence); SEEK_SET SEEK_END SEEK_CUR

long ftell(FILE *stream); void rewind(FILE *stream);

Page 24: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C

Exercício Escrever um array de estruturas

diretamente no arquivo e depois recuperá-lo e imprimir na tela