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

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

Curso de aprofundamento na linguagem C

Apresentações semelhantes


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

1 Curso de aprofundamento na linguagem C
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 de “information 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 Substituídas pelo preprocessador antes da compilação
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 "Curso de aprofundamento na linguagem C"

Apresentações semelhantes


Anúncios Google