Menu
Coddy logo textTech

Include Guards

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 2 de 61.

Quando um arquivo de cabeçalho é incluído várias vezes em um projeto, o compilador vê as mesmas declarações repetidamente, causando erros. Isso geralmente acontece quando vários arquivos incluem o mesmo cabeçalho ou quando os cabeçalhos incluem uns aos outros. As proteções contra inclusão resolvem esse problema.

Uma proteção contra inclusão usa três diretivas do pré-processador para garantir que o conteúdo de um arquivo de cabeçalho seja processado apenas uma vez:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

Veja como funciona: #ifndef MATH_UTILS_H verifica se o símbolo MATH_UTILS_H ainda não foi definido. Se não tiver sido, o pré-processador continua e o define imediatamente com #define MATH_UTILS_H. Tudo entre este ponto e #endif é incluído na compilação.

Na segunda vez que este cabeçalho é incluído, MATH_UTILS_H já está definido, então todo o bloco é ignorado. O nome da guarda é tipicamente o nome do arquivo em letras maiúsculas, com sublinhados substituindo pontos e caracteres especiais.

Todo arquivo de cabeçalho que você criar deve ter guardas de inclusão. Essa é uma prática padrão que evita erros de compilação e torna seu código seguro para ser incluído de qualquer lugar do seu projeto.

challenge icon

Desafio

Fácil

Vamos proteger um arquivo de cabeçalho contra inclusão dupla adicionando guardas de inclusão. Você vai desenvolver a partir do utilitário de saudação da lição anterior, mas desta vez garantindo que o cabeçalho possa ser incluído várias vezes com segurança.

Você criará dois arquivos:

  • greet.h: Seu arquivo de cabeçalho contendo a declaração da função greet. Desta vez, envolva todo o conteúdo com guardas de inclusão usando o símbolo GREET_H.
  • main.c: Seu arquivo principal que inclui o cabeçalho, implementa a função greet e a chama a partir de main().

A função greet deve aceitar um parâmetro const char* para o nome e imprimir:

Hello, Alice!

Seu arquivo de cabeçalho deve seguir esta estrutura:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Você receberá uma entrada: um nome (string).

Imprima a mensagem de saudação exatamente como mostrado no formato acima, substituindo Alice pelo nome fornecido.

Experimente você mesmo

#include <stdio.h>
#include "greet.h"

// TODO: Implementar a função greet que imprime "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Chamar a função greet com o name
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online