Por que #ifndef e #define são usados ​​em arquivos de cabeçalho C ++

Por que #ifndef e #define são usados ​​em arquivos de cabeçalho C ++
Os códigos C ++ podem ficar longos às vezes e a repetição de certas declarações ou funções pode ocorrer. Ter várias funções com nomes semelhantes gera um erro durante a execução do código e não fornece aos usuários a saída desejada. Para impedir que esses tipos de erros tenham identificadores repetidos, como funções, classe ou variáveis, o Guardas de cabeçalho são usados, que são #ifndef e #definir. São derivados C ++ que impedem o conteúdo de um arquivo de cabeçalho de ser usado várias vezes. Esses guardas garantem que o conteúdo de um arquivo de cabeçalho seja usado uma vez em um arquivo.

Neste artigo, o motivo de usar #ifndef e #definir Os guardas do cabeçalho em seu código são discutidos.

Por que #ifndef e #define são usados ​​em arquivos de cabeçalho C ++

Em C ++, o #ifdef e #definir são usados ​​como uma instrução para o compilador para proteger/proteger o uso múltiplo de arquivos de cabeçalho. Por esse motivo, eles também são chamados guardas de cabeçalho. Há uma sintaxe específica que precisa ser seguida para usar #ifndef e #definir. Então, a sintaxe é que sempre que #ifndef é usado, o usuário também é necessário para encerrá -lo usando #fim se e entre estes, quaisquer declarações ou arquivos de cabeçalho podem ser adicionados:

Sintaxe

#ifndef file_h
#Define file_h
// Código de declaração
#fim se

No código C ++, #ifndef e #definir Identifique e prevenir a redeclaração de classes, enumes, variáveis ​​estáticas ou quaisquer outros identificadores. Isso é útil em cenários em que várias classes/funções são criadas e estão sendo chamadas em programas. Porque muitas vezes isso acontece quando um código complexo com várias classes e objetos é projetado e os desenvolvedores tendem a repetir certos identificadores em diferentes arquivos. Por exemplo, vamos supor que um usuário tenha criado dois arquivos correlacionados i.e arquivo1.h e a File2.h e incluiu o arquivo1.h no arquivo2.H e vice -versa.

Ao fazer isso, ocorre uma repetição causando recursividade. Para evitar essa recursividade se o usuário adicionar #ifndef e #definir Arquivos de cabeçalho, então esses cabeçalhos instruirão o compilador para impedir essa recursividade.

O que é recursividade em um código e como ““#ifndef e ““#definir Ajuda com recursividade

Recursividade refere -se à capacidade de uma função ser incluída várias vezes em um código -fonte. Ter recursividade em um código gerará diferentes tipos de erros de compilação, como múltiplas definições, redefinição de símbolos e mais. Para evitar essa recursividade, usamos “#Ifndef” e "#definir" guardas de cabeçalho.

Vamos acompanhar um exemplo de como “#Ifndef” e "#definir" evita a recursividade em um código. Suponha que exista um arquivo de cabeçalho “x.h " Isso inclui o arquivo de cabeçalho “y.h ", e o outro arquivo de cabeça “y.h " Inclui “x.h ". Isso é chamado de inclusão recursiva e criará erros quando você compilar o código. Para evitar isso, podemos usar #ifndef e #definir em x.h e y.h do seguinte modo:

O arquivo de cabeçalho x.h é dado abaixo:

#ifndef x_h
#define x_h
#include "y.h "
// Conteúdo do arquivo de cabeçalho restante
#fim se

O arquivo de cabeçalho y.h é dado abaixo:

#ifndef y_h
#Define y_h
#include "x.h "
// Conteúdo do arquivo de cabeçalho restante
#fim se

Aqui, X_h e Y_h são símbolos únicos definidos por #definir. A primeira vez x.h está incluído, X_h não será definido, então o pré -processador o definirá e incluirá y.h. Quando y.h está incluído, Y_h não será definido, então o pré -processador o definirá e incluirá x.h de novo. No entanto, desta vez, A_h será definido, para que o pré -processador pulará a inclusão de x.h.

Dessa forma, a inclusão recursiva é evitada e o programa pode ser compilado sem erros.

Conclusão

O #ifndef e #definir são conhecidos como guardas de cabeçalho Para C ++, que são usados ​​para prevenir/proteger a recursividade ou repetição de identificadores. Os guardas do cabeçalho são usados ​​para pré-processamento e é por isso que eles são usados ​​dentro do .arquivos H (cabeçalho) arquivos e não no principal .cpp Arquivo (compilação). A sintaxe e o uso do protetor de cabeçalho são discutidos nas diretrizes acima mencionadas.