A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Módulos em C Curso de aprofundamento na linguagem C.

Apresentações semelhantes


Apresentação em tema: "Módulos em C Curso de aprofundamento na linguagem C."— Transcrição da apresentação:

1 Módulos em C Curso de aprofundamento na linguagem C

2 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

3 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?

4 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!

5 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

6 Propriedade dos Módulos Podem esconder certos símbolos para aplicar um nível deinformation hiding Podemos aplicar alguns conceitos de Orientação a Objetos na construção de módulos

7 Módulos X Classes Pode ser encarado como uma Classe Várias estruturas de C podem ter equivalências com os conceitos de OO

8 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!

9 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

10 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

11 Equivalências Atributos Estáticos: variáveis globais Perigo no acesso concorrente Podem ter caráter privado se definidas como static

12 Equivalências Herança e Polimorfismo Atributos na mesma ordem dos pais Utilização de macros Casts Polimorfismo forçado

13 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

14 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

15 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);

16 Padrões de codificação Destrutores void destroy_conta(Conta *c);

17 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)

18 #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

19 #define Macros Constantes Substituídas pelo preprocessador antes da compilação Erros de semântica em Macros Exemplo SQR

20 #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

21 #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)

22 #if, #ifdef, #ifndef #ifdef e #ifndef Macros como parâmetro Equivalentes aos #if defined #if !defined Exemplo de utilização Arquivos de cabeçalho

23 #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]

24 #pragma Exemplos VC++ #pragma deprecated(nome1, nome2, …) #pragma hdrstop #pragma once

25 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

26 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),... };

27 Macros pré-definidas __LINE__ __FILE__ __cplusplus __DATE__...

28 #error e #warning Emitem mensagens de erro antes da compilação #error Emite mensagem e aborta compilação #warning Apenas emite mensagem


Carregar ppt "Módulos em C Curso de aprofundamento na linguagem C."

Apresentações semelhantes


Anúncios Google