Última atualização: 26 Feb, 2026

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
| Recurso | Arquivo .h | Arquivo .hpp |
|---|---|---|
| Associação de Linguagem | C e C++ | Somente C++ |
| Convenção ou Regra? | Convenção | Convenção |
| Uso em Projetos C++ | Comum | Preferido por alguns para clareza |
| Suporte a Templates | Sim | Sim |
| Ambiguidade de Código | Possível em projetos multilíngues | Menos 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
.hppquando quiser indicar “este código é apenas C++” — continue usando.hse você estiver trabalhando em ambientes que combinam C e C++.