Menu
CoddyTech

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 acontece com frequência quando vários arquivos incluem o mesmo cabeçalho ou quando os cabeçalhos incluem uns aos outros. As proteções de 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 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 foi, 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 este cabeçalho é incluído, MATH_UTILS_H já está definido, então o bloco inteiro é 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 torna seu código seguro para ser incluído em qualquer lugar do seu 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 utilidade 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 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 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: 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