preprocessor directives c
Uma análise detalhada das diretivas do pré-processador em C ++.
O pré-processador é um recurso exclusivo do C ++. Em C ++, temos etapas como compilação, vinculação e execução de um programa típico. Na realidade, temos muitos outros recursos em um programa C ++ que precisam ser processados antes de passar o programa para compilação.
Para isso, é realizada uma etapa especial denominada pré-processamento. O pré-processamento é executado antes do processo de compilação e os recursos especiais são pré-processados. Como resultado, um programa C ++ expandido é obtido e então passado para o compilador.
=> Visite aqui para aprender C ++ do zero.
O que você aprenderá:
- Visão geral
- Diretivas de inclusão de arquivo
- Diretivas de definição de macro
- Diretivas de compilação condicional
- Os # & ## operadores
- Outras Diretivas
- Macros Predefinidas
- Conclusão
- Leitura recomendada
Visão geral
Os recursos especiais para o pré-processamento são identificados por meio de uma entidade chamada “Diretiva do pré-processador”. Essas diretivas de pré-processador informam ao compilador que certas informações no programa C ++ marcadas com diretivas de pré-processador precisam ser pré-processadas antes da compilação.
Observe que em C ++ todas as diretivas de pré-processador começam com um símbolo “#”. No momento em que o pré-processador (parte do compilador) encontra o símbolo #, as informações após o símbolo # são pré-processadas antes de passar o programa para o compilador.
Ao contrário das outras instruções C ++, as diretivas do pré-processador não terminam com um ponto e vírgula.
Neste tutorial, exploraremos as várias diretivas de pré-processador suportadas pelo C ++.
Diretivas de inclusão de arquivo
#incluir
A diretiva de inclusão de arquivo #include nos permite incluir outros arquivos em nosso programa de origem. Podemos incluir qualquer arquivo de cabeçalho que contenha definições de várias funções predefinidas em nosso programa usando essas funções. Podemos incluir arquivos de cabeçalho em nosso programa usando a seguinte sintaxe.
#include
Exemplo: #incluir
Já vimos isso em nossos programas C ++. O cabeçalho iostream contém as funções necessárias para o streaming de dados de entrada / saída como cout, cin, etc.
À medida que nossos programas ficam maiores ou a funcionalidade se torna complexa, podemos dividir nosso programa em vários arquivos ou importar funcionalidades de outros arquivos. Nesse caso, usamos arquivos definidos pelo usuário. Para incluir arquivos definidos pelo usuário em nosso programa, podemos fazer uso da seguinte sintaxe da diretiva #include.
#include “filename”
Exemplo: #include “vector_int.h”
Este é um arquivo de cabeçalho definido pelo usuário que pretendemos incluir em nosso programa para usar sua funcionalidade.
O exemplo de código a seguir mostra o uso da diretiva #include.
casos de teste em exemplos de teste de software
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Resultado:
Este é um exemplo que demonstra a diretiva de inclusão #include.
Conforme mostrado, usamos a diretiva #include para incluir a funcionalidade do cabeçalho em nosso programa.
Diretivas de definição de macro
#definir
A diretiva #define é usada para definir as constantes simbólicas ou macros no programa C ++.
A forma geral de uma diretiva #define é:
#define macro_name replacement code
Quando um pré-processador encontra a macro no programa, o pré-processador substitui essa macro pelo código que é definido usando a diretiva #define antes que o código seja passado para o compilador.
O exemplo de código abaixo mostra uma constante simbólica RADIUS que é definida usando a diretiva #define e seu uso no programa.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Resultado:
Área de um círculo: 78,55
Conforme mostrado no programa, podemos fazer uso da constante simbólica RADIUS em nosso código e ela será substituída pelo valor definido para ela usando a diretiva #define.
bom aplicativo de download de mp3 para android
Podemos usar a diretiva #define para definir um código de função adequado. Essas funções geralmente são pequenas funções.
Um exemplo é mostrado abaixo.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
Resultado:
A área de um retângulo é: 100
Aqui, usando a diretiva #define, definimos uma função REC_AREA que recebe dois argumentos, ou seja, comprimento e largura, e calcula a área de um retângulo. Na função principal, apenas fazemos uso desta macro e fornecemos dois argumentos a ela para obter a área de um retângulo.
#undef
As macros em um programa definido com a diretiva #define duram até que seja indefinido usando a diretiva #undef. Assim que o programa encontrar #undef, o uso subsequente de macro (indefinido por #undef) dará um erro de compilação.
No programa acima, se apenas fornecermos uma instrução #undef REC_AREA após as declarações de inteiros, o programa apresentará um erro de compilação.
Diretivas de compilação condicional
Além das diretivas explicadas acima, C ++ também fornece as seguintes diretivas que podem ser usadas para compilação condicional de código. Essas diretivas podem ser usadas em linhas semelhantes da instrução if-else do C ++.
Por exemplo, podemos definir DEBUG para um programa ON ou OFF usando essas diretivas condicionais.
Algumas das diretivas de compilação condicional fornecidas em C ++ incluem:
- #E se
- #elif
- #fim se
- #ifdef
- #ifndef
- #outro
O programa a seguir demonstra o uso de diretivas de compilação condicional em um programa C ++.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
Resultado:
Trace: início da função principal
O máximo é 100
Trace: Fim da função principal
No programa acima, usamos a diretiva #ifdef - #endif para definir um DEBUG para o programa. Em seguida, indefinimos a função de macro MAX usando a diretiva #undef. A diretiva de compilação condicional constrói #ifdef - #endif verifica se DEBUG está definido e, se estiver definido, imprime algumas mensagens no programa.
Os # & ## operadores
Os operadores # e ## são dois operadores especiais usados respectivamente para converter um token de texto em uma string a ser exibida e concatenar dois tokens.
Abaixo fornecido é um exemplo que demonstra esses dois operadores.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< Resultado:
MKSTR (Hello World) = Hello World
concat (x, y) = 100
No programa acima, definimos MKSTR com um argumento x. Possui corpo #x. Quando imprimimos este MKSTR usando o argumento “Hello World”, vemos que por causa de #x, o argumento é convertido em uma string e é exibido na saída.
A seguir, definimos uma função concat com dois argumentos a e b. No corpo, especificamos um ## b. Expressão a ## b é igual a ab. Portanto, na função principal, quando chamamos concat (x, y), ela realmente é avaliada como xy, que é igual à variável inteira que definimos.
Outras Diretivas
#erro
A sintaxe geral da diretiva #error é:
#error error_message
Quando o compilador encontra a diretiva #error, ele exibe a mensagem de erro e a compilação é interrompida. O argumento error_message pode conter uma ou mais palavras com ou sem aspas.
#linha
Isso diz ao compilador para alterar o número da linha e o nome do arquivo armazenados internamente do compilador para o número da linha e o nome do arquivo fornecidos.
#linha sequência de dígitos [“nome do arquivo”]
O digit_sequence pode ser uma constante inteira.
Exemplo:#line 200 test.c
No exemplo acima, o número da linha armazenado internamente é definido como 200 e o nome do arquivo é alterado para test.c.
o que é teste de regressão em qa
#pragma
Fornece instruções definidas pela implementação para o compilador. Essas instruções são específicas para o compilador e a plataforma. Se a instrução não corresponder, a diretiva será ignorada sem gerar um erro de sintaxe.
Macros Predefinidas
C ++ também define várias macros predefinidas que podem ser usadas pelos programadores.
Algumas dessas macros são tabularizadas abaixo.
Macro Predefinida Descrição __ARQUIVO__ O nome do arquivo atual do programa sendo compilado __ENCONTRO__ Data da tradução do código-fonte em código-objeto no formato mês / dia / ano __TEMPO__ Tempo na forma hora: minuto: segundo em que o programa é compilado __LINHA__ O número da linha atual do programa que está sendo compilado __cplusplus Constante inteira que é definida para cada versão do compilador
O programa a seguir demonstra essas macros em um programa.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< Resultado:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: 15 de abril de 2019
__TIME__: 12: 09: 15
__cplusplus: 201402
A saída do programa acima está de acordo com a explicação das macros predefinidas acima e é autoexplicativa.
Conclusão
Neste tutorial, vimos várias diretivas de pré-processador fornecidas pelo C ++ junto com seus exemplos. As diretivas do pré-processador nos ajudam a escrever programas mais eficientes e programas mais legíveis até certo ponto.
As diretivas de compilação condicional também nos permitem ramificar a saída do programa de várias maneiras.
=> Procure toda a série de treinamento C ++ aqui.
Leitura recomendada
- Programa de Afiliados da Ajuda do Teste de Software!
- Escreva e ganhe - programa para testadores de controle de qualidade experientes
- Tutorial de Pipes Unix: Pipes em Programação Unix
- Funções de biblioteca em C ++
- 70+ MELHORES tutoriais em C ++ para aprender programação C ++ GRATUITAMENTE
- Argumentos de linha de comando em C ++
- Iteradores em STL
- Listas de inicializadores em C ++