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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/1.jpg)
Modificadores de tipos e Arquivos
Curso de aprofundamento na linguagem C
![Page 2: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/2.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/3.jpg)
Classes de armazenamento Automatic (auto) Static Register Typedef Extern
![Page 4: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/4.jpg)
Automatic Variáveis de escopo local Armazenamento na pilha Tipo default
![Page 5: Modificadores de tipos e Arquivos Curso de aprofundamento na linguagem C.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/5.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/6.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/7.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/8.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/9.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/10.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/11.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/12.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/13.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/14.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/15.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/16.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/17.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/18.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/19.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/20.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/21.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/22.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/23.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062303/552fc10b497959413d8c32d7/html5/thumbnails/24.jpg)
Exercício Escrever um array de estruturas
diretamente no arquivo e depois recuperá-lo e imprimir na tela