Menu
CoddyTech

Proteções de inclusão

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 acontece com frequência quando vários arquivos incluem o mesmo cabeçalho ou quando cabeçalhos incluem uns aos outros. As proteções de inclusão resolvem esse problema.

Uma proteção de inclusão usa três diretivas do pré-processador para garantir que o conteúdo de um 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 esse ponto e #endif é incluído na compilação.

Na segunda vez que esse cabeçalho é incluído, MATH_UTILS_H já está definido, então todo o bloco é ignorado. O nome da proteção geralmente é o nome do arquivo em letras maiúsculas, com sublinhados no lugar de 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 permite incluir seu código com segurança em qualquer lugar do projeto.

challenge icon

Desafio

Fácil

Vamos proteger um arquivo de cabeçalho contra inclusões duplicadas adicionando guardas de inclusão. Você vai desenvolver a partir do utilitário de saudação da lição anterior, mas desta vez vai garantir que seja seguro incluir o cabeçalho várias vezes.

Você vai criar dois arquivos:

  • greet.h: Seu arquivo de cabeçalho, que contém 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 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: Implemente a função greet que imprime "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Chame a função greet com o nome
    
    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