terça-feira, 26 de maio de 2020

Pré-Processamento - Directiva condicional


        Pré-Processamento       

 Directivas condicionais directives (C/C++)

 Directivas condicionais instruem ao  pré-processador a seleccionar se deve ou não incluir um pedaço de código no fluxo de token final passado para o compilador. Podem testar expressões aritméticas ou se um nome é definido como uma macro ou ambos simultaneamente usando uma directiva especifica.

A linguagem de programação C apresenta um conjunto de directivas que são usadas para estruturas de controlo condicionais: #if, #elif, #else, and #endif.


Directiva

Descrição

Sintaxe

#if

Testa se uma determinada expressão é verdadeira

#if expression
//code
#endif

#else

A alternativa de #if

#if expression
//if code
#else
//else code
#endif

#elif

#else e #if em apenas uma directiva

#if expression
//if code
#elif expression
//elif code
#else
//else code
#endif

#endif

Término da instrução #if

 

#ifdef

Retorna verdadeiro se o macro estiver definido

#ifdef MACRO
//code
#endif

#ifndef

Retorna verdadeiro se o macro não estiver definido

#ifndef MACRO
//code
#endif

 

Exemplo:

#include <stdio.h> 

#include <conio.h> 

#define NUM 1 

int main() { 

       #if NUM==0 

           printf("O valor do numero e': %d",NUMBER); 

       #else 

          printf("O valor do numero nao e'' zero"); 

       #endif        

return 0;

}

Operadores de Macro

Existem operadores que tem um significado especifico no contexto de operadores.

 

Operador      

Nome

Descrição

\

Operador de continuidade

Sinaliza a continuidade da declaração na linha seguinte

#

 

Stringize

 

Ao usar ao longo da declaração do macro. Sinaliza a conversão do valor de macro para string

##

Token pasting

Combina 2 argumentos em apenas um

#defined()

defined

É aplicado em macro para verificar se uma constante esta definida. Caso esteja definido retorna true(1) caso contrario retorna false(0)

 

Exemplo:

Verifica se o número é igual a zero e mostra a mensagem correspondente.

#include <stdio.h> 

#include <conio.h> 

#define NUM 1 

int main() { 

#if NUM==0 

printf("O valor do numero e': %d",NUM); 

#else 

printf("O valor do numero nao e' zero"); 

#endif        

return 0;

}

  

 

Observações

Cada diretiva #if em um arquivo de origem deve corresponder a uma diretiva #endif de fechamento. Qualquer número de diretivas #elif pode aparecer entre as diretivas #if e #endif, mas no máximo uma diretiva #else é permitida. A diretiva #else, se presente, deve ser a última diretiva antes de #endif.

 

As diretivas #if, #elif, #else e #endif podem aninhar nas partes de texto de outras diretivas #if. Cada diretiva #else, #elif ou #endif aninhada pertence à diretiva #if anterior mais próxima.

 O pré-processador seleciona uma das ocorrências de texto fornecidas para processamento adicional. Um bloco especificado no texto pode ser qualquer sequência de texto. Pode ocupar mais de uma linha.

 O pré-processador seleciona um único item de texto avaliando a expressão constante após cada diretiva #if ou #elif até encontrar uma expressão constante verdadeira (diferente de zero). S seleciona todo o texto (incluindo outras diretivas de pré-processador começando com #) até o #elif, #else ou #endif associado.

 Se todas as ocorrências de expressão constante forem falsas ou se nenhuma diretiva #elif aparecer, o pré-processador selecionará o bloco de texto após a cláusula #else. Quando não há cláusula #else, e todas as instâncias de expressão constante no bloco #if são falsas, nenhum bloco de texto é selecionado.

 
Share:

0 comentários:

Enviar um comentário

Seguidores

Visitantes do blog

Pesquisar neste blogue

posts recentes