Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.