módulos em c curso de aprofundamento na linguagem c
TRANSCRIPT
![Page 1: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/1.jpg)
Módulos em C
Curso de aprofundamento na linguagem C
![Page 2: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/2.jpg)
Módulos Divisões lógicas de um programa Podem incluir estruturas de dados,
funções, constantes e globais Facilitam a manutenção Compilação mais rápida Reuso de código
![Page 3: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/3.jpg)
Módulos: convenções A main fica num módulo separado e
apenas inclui os outros módulos Compostos por um arquivo .c e por
um arquivo .h Porque 2 arquivos? O que poderia acontecer se fosse
apenas um arquivo?
![Page 4: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/4.jpg)
Header X Sources O que fica no cabeçalho?
Structs e unions Tipos auxiliares (typedef) Constantes Macros Protótipos de funções Declarações de globais
• Declaração não é definição!
![Page 5: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/5.jpg)
Header X Source O que fica no fonte?
Definições de globais Implementações de funções descritas
no header Funções euxiliares que não são
exportadas
![Page 6: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/6.jpg)
Propriedade dos Módulos Podem esconder certos símbolos
para aplicar um nível de “information hiding”
Podemos aplicar alguns conceitos de Orientação a Objetos na construção de módulos
![Page 7: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/7.jpg)
Módulos X Classes Pode ser encarado como uma Classe Várias estruturas de C podem ter
equivalências com os conceitos de OO
![Page 8: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/8.jpg)
Equivalências O módulo todo seria uma classe,
mas o objeto seria definido por uma struct
Atributos agregados na struct Não existem atributos privados em
estruturas Diminui o overhead Cuidado no acesso!
![Page 9: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/9.jpg)
Equivalências Métodos: funções que alteram
membros da struct Convenções:
• Devem receber como 1° parâmetro a struct• Devem ter nome associado à struct
Métodos estáticos: funções que não alteram membros da struct Podem ser definidos como funções
normais
![Page 10: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/10.jpg)
Equivalências Métodos privados: podem ser
definidos apenas adicionando a palavra chave static Não pode ser visto por outros módulos Visibilidade restrita ao arquivo fonte
![Page 11: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/11.jpg)
Equivalências Atributos Estáticos: variáveis globais
Perigo no acesso concorrente Podem ter caráter privado se definidas
como static
![Page 12: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/12.jpg)
Equivalências Herança e Polimorfismo
Atributos na mesma ordem dos pais Utilização de macros Casts
• Polimorfismo forçado
![Page 13: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/13.jpg)
Padrões de codificação Importante para adoção da divisão
baseada em objetos Ausência implica em:
Duplicação de variáveis globais/funções Tempo de produção do programador
diminuído
![Page 14: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/14.jpg)
Padrões de codificação Exemplo de notação
Adição de prefixos ao nome de globais e funções que são referentes a um determinado módulo ou struct• Exemplo:• double conta_creditar(Conta *c, double v);
• Pode ser combinada com algum outro padrão da escolha do usuário
• Notação húngara• Padrão Java de codificação• Padrão Linux
![Page 15: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/15.jpg)
Padrões de codificação Construtores e destrutores
Incentivam o uso de funções Concentram o processo de alocar e
liberar memória, evitando memory leak Exemplo padrões de construtores:
• Alocação externa• void init_conta(Conta *c, int numero, double v);
• Alocação interna• Conta *create_conta(int numero, double v);
![Page 16: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/16.jpg)
Padrões de codificação Destrutores
void destroy_conta(Conta *c);
![Page 17: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/17.jpg)
Preprocessador C Executado antes de qualquer processo de
compilação ou verificação de tipo Comando identificados pelo prefixo “#” Ferramenta cpp utilizada em conjunto
com o gcc Pode ser utilizada em conjunto com
outros tipos de arquivo, mas é otimizada para arquivos C (comentários e estilo de programação)
![Page 18: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/18.jpg)
#include Inclui declarações de outros
arquivos no arquivo atual Substituição da diretiva #include
pelo conteúdo literal do arquivo (copia e cola)
Parâmetros entre <> ou “” Deve receber APENAS arquivos de
cabeçalho
![Page 19: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/19.jpg)
#define Macros
Constantes Substituídas pelo preprocessador
antes da compilação Erros de semântica em Macros
Exemplo SQR
![Page 20: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/20.jpg)
#if, #ifdef, #ifndef Decisões de precompilação Código interno da diretiva é
adicionado ao programa caso a condição seja satisfeita
Código multiplataforma Uso de bibliotecas Construção de headers
![Page 21: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/21.jpg)
#if, #ifdef, #ifndef Utilizados em conjunto com as diretivas
#else #elif #endif
#if e #elif Expressão como parâmetro
• Não existem tipos• Operadores resultam em inteiros • (expressões C)
![Page 22: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/22.jpg)
#if, #ifdef, #ifndef #ifdef e #ifndef
Macros como parâmetro Equivalentes aos
• #if defined • #if !defined
Exemplo de utilização• Arquivos de cabeçalho
![Page 23: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/23.jpg)
#pragma Configuração de opções do
compilador Específico para cada compilador Exemplos GCC:
#pragma GCC poison [name1 name2...] #pragma GCC dependency “arquivo” [comentário]
![Page 24: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/24.jpg)
#pragma Exemplos VC++
#pragma deprecated(nome1, nome2, …) #pragma hdrstop #pragma once
![Page 25: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/25.jpg)
Comandos # e ## Utilizados normalmente dentro de
macros #
Prefixo que converte um parâmetro em string. O valor do parâmetro não é utilizado, e sim apenas o nome
#define STR(x) #x
![Page 26: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/26.jpg)
Comandos # e ## ##
Funde dois tokens• A ## B resulta em AB
struct command{ char *name; void (*function) (void);}; struct command commands[] ={ { "quit", quit_command }, { "help", help_command }, ...};
#define COMMAND(NAME) { #NAME, NAME ## _command } struct command commands[] ={ COMMAND (quit), COMMAND (help), ...};
![Page 27: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/27.jpg)
Macros pré-definidas __LINE__ __FILE__ __cplusplus __DATE__ ...
![Page 28: Módulos em C Curso de aprofundamento na linguagem C](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc0f8497959413d8b4c8e/html5/thumbnails/28.jpg)
#error e #warning Emitem mensagens de erro antes da
compilação #error
Emite mensagem e aborta compilação #warning
Apenas emite mensagem