Última atualização: 26 Feb, 2026

Título - .h vs .hpp: Qual a Diferença e Qual Você Deve Usar?

Ao escrever programas em C++, especialmente em projetos grandes, organizar seu código em vários arquivos é essencial para legibilidade e manutenção. Isso geralmente envolve o uso de arquivos de cabeçalho, que possuem as extensões .h ou .hpp. Mas qual é a diferença entre esses dois, e qual você deve usar?

Neste artigo, vamos analisar as diferenças entre os arquivos .h e .hpp, explorar sua história e oferecer orientações sobre as melhores práticas.

Entendendo Arquivos de Cabeçalho em C++

Arquivos de cabeçalho contêm declarações de funções, classes, constantes e macros que podem ser incluídas em vários arquivos fonte. Esses arquivos são então incluídos em arquivos .cpp (fonte C++) usando a diretiva #include.

Conteúdo Comum de Arquivos de Cabeçalho

  • Definições de classes
  • Declarações de funções
  • Definições de constantes
  • Macros
  • Templates (em alguns casos)

Arquivos .h

O que é um Arquivo .h?

Arquivos .h são arquivos de cabeçalho tradicionais e foram amplamente usados pela primeira vez na linguagem de programação C. Eles ainda são usados em projetos C e C++ para declarar interfaces.

Exemplo de Uso:

// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H

int add(int a, int b);
int subtract(int a, int b);

#endif

Vantagens:

  • Reconhecidos universalmente (usados tanto em C quanto em C++).
  • Adequados para projetos que envolvem código C e C++.

Desvantagens:

  • Pode causar ambiguidade em projetos C++ sobre se o arquivo é estilo C ou estilo C++.

Arquivos .hpp

O que é um Arquivo .hpp?

Arquivos .hpp são arquivos de cabeçalho específicos para C++. Eles funcionam da mesma forma que arquivos .h, mas são usados para indicar explicitamente que o cabeçalho destina‑se ao código C++.

Exemplo de Uso:

// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP

#include <vector>

std::vector<int> filter_even(const std::vector<int>& input);

#endif

Vantagens:

  • Indica claramente que o arquivo destina‑se ao código C++.
  • Evita confusão ao misturar C e C++.
  • Útil em projetos multilíngues ou equipes que seguem convenções de nomenclatura rigorosas.

Desvantagens:

  • Um pouco menos comum em bases de código antigas.
  • Não reconhecido por alguns sistemas legados que esperam .h.

.h vs .hpp: Principais Diferenças

RecursoArquivo .hArquivo .hpp
Associação de LinguagemC e C++Somente C++
Convenção ou Regra?ConvençãoConvenção
Uso em Projetos C++ComumPreferido por alguns para clareza
Suporte a TemplatesSimSim
Ambiguidade de CódigoPossível em projetos multilínguesMenos provável

Melhores Práticas para Escolher Entre .h e .hpp

Aqui estão algumas diretrizes gerais para ajudá‑lo a escolher:

Use .h se:

  • Você está escrevendo código que deve ser compatível com C e C++.
  • Você está mantendo ou estendendo código legado que já usa .h.

Use .hpp se:

  • Você deseja deixar claro que o arquivo é específico para C++.
  • Você está trabalhando em um projeto somente C++ ou usando recursos específicos de C++ como classes, templates e namespaces.

Estruturas de Projeto Comuns

Exemplo com .h:

project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp

Exemplo com .hpp:

project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp

Ambas as estruturas são válidas; a diferença está principalmente na clareza e nas preferências da equipe.

Conclusão

A escolha entre .h e .hpp é, em grande parte, uma questão de convenção, não de funcionalidade. Ambos servem ao mesmo propósito: declarar interfaces e código compartilhado entre vários arquivos fonte C++.

No entanto, para código específico de C++, usar .hpp pode tornar suas intenções mais claras e ajudar a evitar confusão em bases de código maiores — especialmente aquelas que envolvem múltiplas linguagens. Para projetos multilíngues ou legados, .h ainda pode ser a melhor opção.

Principais Conclusões:

Use .hpp quando quiser indicar “este código é apenas C++” — continue usando .h se você estiver trabalhando em ambientes que combinam C e C++.

Veja Também