módulos em c curso de aprofundamento na linguagem c

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

Upload: internet

Post on 16-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

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

Módulos em C

Curso de aprofundamento na linguagem C

Page 2: Módulos em C Curso de aprofundamento na linguagem C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Padrões de codificação Destrutores

void destroy_conta(Conta *c);

Page 17: Módulos em C Curso de aprofundamento na linguagem C

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

#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

#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

#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

#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

#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

#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

#pragma Exemplos VC++

#pragma deprecated(nome1, nome2, …) #pragma hdrstop #pragma once

Page 25: Módulos em C Curso de aprofundamento na linguagem C

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

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

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

Page 28: Módulos em C Curso de aprofundamento na linguagem C

#error e #warning Emitem mensagens de erro antes da

compilação #error

Emite mensagem e aborta compilação #warning

Apenas emite mensagem