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

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

Transcript of Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C.

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