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

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

DHD – Desenvolvimento em Hardware

Apresentações semelhantes


Apresentação em tema: "DHD – Desenvolvimento em Hardware"— Transcrição da apresentação:

1 DHD – Desenvolvimento em Hardware
quarta-feira, 7 de novembro de 2018quarta-feira, 7 de novembro de 2018

2 16 Diretivas de Compilação e outros conceitos
DHD – Desenvolvimento em Hardware Diretivas de Compilação e outros conceitos Diretivas de Compilação Parâmetros do main() Union Enumeração Ponteiro para ponteiro Lista Encadeada Prof. Frederico Brito Fernandes quarta-feira, 7 de novembro de 2018quarta-feira, 7 de novembro de 2018

3 (1) Diretivas de Compilação
As diretivas de compilação são comandos... Não compilados Manipulados pelo pré-processador C Iniciados pelo caracter # Terminados pelo caractere de final de linha ou ‘\’ Que podem ser colocados em qualquer parte do programa Ex: #include, #define, #undef, #if, #endif, #else, #ifdef, #ifndef, #elif #include <stdio.h> #define N (100 + \ 30 – 20) main(){ if (N>13) } Depois do Pré-processamento // funcoes do stdio.h coladas aqui main(){ if ( ( )>13) } Obs: já sabemos como funcionam o #include e #define

4 (1) Diretivas de Compilação
#undef Faz com que a macro seja apagada da tabela que guarda as macros A partir desse ponto, o compilador não reconhece mais a macro Ex: #include <stdio.h> #define N 100 main(){ if (N>13) printf(“Eh maior”); #undef N if (N<13) printf(“Eh menor”); // ERRO DE SINTAXE: N indefinido }

5 (1) Diretivas de Compilação
#ifdef e #endif Condicionais de pré-compilação Ex: #define PORT_0 0x378 ... /* Linhas de codigo qualquer... */ #ifdef PORT_0 #define PORTA PORT_0 #include "../sys/port.h" #endif

6 (1) Diretivas de Compilação
#elif Condicional de pré-compilação Serve para montar if-else aninhados Na verdade, funciona mais como o switch em C Ex: #if expressão_constante_1 sequência_de_declarações_1 #elif expressão_constante_2 sequência_de_declarações_2 #elif expressão_constante_3 sequência_de_declarações_3 . #elif expressão_constante_n sequência_de_declarações_n #endif

7 (2) Parâmetros da função main()
A função main pode trabalhar com parâmetros: int main (int argc,char *argv[]); Onde: argc é o número de parâmetros passados, e é calculado automaticamente, ou seja, você não precisa usar um valor na chamada do main. Seu valor mínimo é 1, pois o nome do programa já conta como 1 valor argv é um vetor que guarda as strings passadas na frente da função Ex1: programa que calcula o tamanho da string passada no parâmetro #include <stdio.h> #include <string.h> main(int argc,char *argv[]){ if (argc==2) { printf("O nome \"%s\" tem %d caracteres", argv[1],strlen(argv[1])); } 1 2 No DevC++: Clique em [Executar] Depois [Parâmetros] Digite “Fred” No DOS: Clique em [Iniciar]-[Executar] Digite cmd, para acessar o prompt Localize seu programa teste.exe (ex) Execute-o: teste Fred Passagem de parâmetros:

8 (2) Parâmetros da função main()
Ex2: o que faz o programa abaixo? #include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]) { int mes; char *nomemes [] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro","Outubro","Novembro", "Dezembro"}; if(argc == 4){ // Testa se o numero de parametros fornecidos esta correto mes = atoi(argv[2]); if (mes<1 || mes>12) printf("Erro!\nUso: data dia mes ano, todos inteiros"); else printf("\n%s de %s de %s", argv[1], nomemes[mes-1], argv[3]); } else printf("Erro!\nUso: data dia mes ano, todos inteiros");

9 (2) Parâmetros da função main()
Auto-avaliação Faça um programa que em C que recebe como parâmetros, 3 números inteiros e imprime o maior deles na tela. Ex: maior 1 5 3 O maior numero eh o 5 Dica: use a função atoi(), que converte uma string num número inteiro (stdlib.h) Faça um programa que em C que recebe o nome de um arquivo como parâmetro, e imprime na tela o número de caracteres que esse arquivo possui Ex: numeroCaracteres teste.txt O arquivo teste.txt possui 23 caracteres

10 (3) Union Serve para declarar numa mesma posição de memória, variáveis que podem assumir tipos diferentes Útil para economizar memória Sintaxe: union nome_do_tipo_da_union{ tipo_1 nome_1; tipo_2 nome_2; ... tipo_n nome_n; } variáveis_union; Ex: union altura{ float altura_m; float altura_cm; }; float com 4 bytes [100] [104] 1.66 altura_m alura_cm pessoa main(){ union altura pessoa; pessoa.altura_m=1.66; pessoa.altura_cm=170; } [100] [104] 170 altura_m alura_cm pessoa

11 (3) Union Podemos usar variáveis de tipos diferentes: Ex:
union altura{ float altura_m; int altura_cm; }; main(){ union altura pessoa; pessoa.altura_m=1.66; printf("Altura vale %f", pessoa.altura_m); pessoa.altura_cm=170; printf("Altura vale %d", pessoa.altura_cm); } float com 4 bytes int com 2 bytes [100] [102] [104] 1.66 altura_m alura_cm pessoa [100] [102] [104] 170 altura_m alura_cm pessoa Obs: cuidado com: printf("Altura vale %f", pessoa.altura_cm);

12 Determina quais valores uma determinada variável pode assumir Sintaxe:
(4) Enumerações Determina quais valores uma determinada variável pode assumir Sintaxe: enum nome_do_tipo_da_enumeração {lista_de_valores} lista_de_variáveis; Ex: #include <stdio.h> enum dias_da_semana {segunda, terca, quarta, quinta, sexta,sabado, domingo}; main (){ enum dias_da_semana d1,d2; d1=segunda; d2=sexta; if (d1==d2) printf ("O dia eh o mesmo."); else printf ("São dias diferentes."); }

13 (4) Enumerações Auto-avaliação:
Identifique e comente as vantagens da união e da enumeração abaixo: typedef enum {SOLTEIRO, CASADO, DIVORCIADO} tEstadoCivil; typedef struct { char rua[30]; char numero[5]; char cidade[20]; char uf[3]; char cep[10]; } tEndereco; short dia, mes, ano; } tData; struct { char nome[30]; tEndereco endereco; tEstadoCivil estadoCivil; union { char nomeDoConjuge[30]; short moraSozinho; tData dataDoDivorcio; }; } empregado; Verifique se você entende esse código abaixo: if (empregado.estadoCivil == CASADO) { printf("%s", empregado.nomeDoConjuge); } else if (empregado.estadoCivil == SOLTEIRO) { if (empregado.moraSozinho) printf("Mora sozinho"); else printf("Nao mora sozinho"); } else if (empregado.estadoCivil == DIVORCIADO) { printf("%d", empregado.dataDoDivorcio.dia); printf("%d", empregado.dataDoDivorcio.mes); printf("%d", empregado.dataDoDivorcio.ano); }

14 (5) Ponteiros para ponteiros
Em C, é permitido que um ponteiro aponte para outro Sintaxe: tipo_da_variável **nome_da_variável_ponteiro; Ex: #include <stdio.h> int main(){ float pi = , *pf, **ppf; pf = π /* pf armazena o endereco de pi */ ppf = &pf; /* ppf armazena o endereco de pf */ printf("%f", **ppf); /* Imprime o valor de fpi */ printf("%f", *pf); /* Tambem imprime o valor de fpi */ } O que seria fazer: ppf = pf;

15 Desvantagens de vetores de tamanho variável:
(6) Lista Encadeada Desvantagens de vetores de tamanho variável: Nem sempre queremos alocar N elementos ao mesmo tempo Algumas aplicações requerem a inserção/deleção constantes de elementos Solução: Usar listas ligadas Dado Dado Dado Dado

16 Ex: (6) Lista Encadeada struct Produto tProduto main(){
#include <stdlib.h> #include <stdio.h> typedef struct Produto { int codigo; double preco; struct Produto *proximo; } tProduto; main(){ tProduto *cabeca, *atual, *aux; cabeca = (tProduto *) malloc(sizeof(tProduto)); cabeca->proximo = NULL; atual = (tProduto *) malloc(sizeof(tProduto)); cabeca->proximo = atual; atual->proxim = NULL; aux = (tProduto *) malloc(sizeof(tProduto)); atual->proximo = aux; aux->proximo = NULL; } struct Produto codigo preco NULL tProduto cabeca atual aux codigo preco proximo codigo preco proximo codigo preco NULL


Carregar ppt "DHD – Desenvolvimento em Hardware"

Apresentações semelhantes


Anúncios Google