Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender a diretiva #ifndef
  2. Uso de #ifndef em include guards

A diretiva #ifndef é utilizada para criar uma definição caso um não tenha ainda sido definida. Essa diretiva também suporta a diretiva #else.

Sintaxe
#ifndef nome_definicao
  //definição
#else //opcional
  //outro tratamento
#endif
Exemplo 1
#include <stdio.h>
#ifndef DEBUG 
    #define DEBUG "modo_dbg"
#endif

int main()
{
  printf("%s",DEBUG);    
}
Saída
modo_dbg

Essa diretiva também é utilizada para evitar a duplicação de inclusão de código quando utilizamos uma mesma linha #include em vários arquivos que geram includes em cascata, aumentando assim o tamanho do programa.

Sintaxe
#ifndef NOME_BIBLIOTECA_H
#define NOME_BIBLIOTECA_H
//código
#endif
Exemplo 2
//tipo.h
#ifndef TIPOS_H
#define TIPOS_H
struct meu_tipo
{
    //omitido
};
#endif

//arquivo1.h
#include "tipos.h" //sem #ifndef o tipo seria definido novamente

//arquivo2.c
#include "tipos.h" //sem #ifndef o tipo seria definido novamente
#include "arquivo1.h" //sem #ifndef o tipo seria definido novamente
Saída
-
  1. 05/05/2025 - versão inicial