.h ou .hpp para arquivos de cabeçalho C++? Esclarecendo de uma vez por todas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

.h ou .hpp para arquivos de cabeçalho C++? Esclarecendo de uma vez por todas



Se você já programou em C++ por mais de algumas semanas, certamente já se deparou com esta questão. Você abre um projeto de outra pessoa — lá está .h. Você começa o seu — uma voz na sua cabeça diz: "Será que .hpp é mais legal?". Ou o contrário: você é um fã ferrenho de .h, e um colega afirma que .hpp é o único caminho correto.



Spoiler: ambas as opções são tecnicamente corretas. O compilador não se importa. Mas a diferença existe, e é importante para a organização do código, legibilidade e manutenção do projeto. Vamos entender o que está por trás dessas duas extensões e quando escolher cada uma.



Resposta curta: qual é a diferença fundamental?



De forma bem resumida:



  • .h — extensão tradicional para arquivos de cabeçalho, vinda do C. Usada tanto em C quanto em C++.
  • .hpp — extensão mais moderna, que indica explicitamente: "Isto é C++, não C". Foi criada para distinguir cabeçalhos C++ dos cabeçalhos C.


Mas o diabo, como sempre, está nos detalhes. Vamos nos aprofundar.



Contexto histórico: de onde vieram .h e .hpp?



A linguagem C usa .h para cabeçalhos desde tempos imemoriais. Quando o C++ surgiu, no início os programadores simplesmente continuaram usando .h — e isso é normal. A biblioteca padrão do C++ (por exemplo, <iostream>) abandonou completamente as extensões, mas isso já é outra história.



A extensão .hpp surgiu como resposta à necessidade de separar código C e C++. Imagine: você tem um grande projeto onde parte dos arquivos é em C, parte em C++. Você compila tudo, possivelmente com compiladores diferentes ou com flags diferentes. Como saber rapidamente qual cabeçalho é para qual linguagem? Isso mesmo — olhando para a extensão.



Assim, .hpp (de "C Plus Plus header") tornou-se o padrão de facto na comunidade para cabeçalhos puramente C++, especialmente em bibliotecas como Boost.



Quando usar .h?



Não se apresse em descartar o .h. Ele tem seus pontos fortes:



  • Compatibilidade com C. Se o seu arquivo de cabeçalho precisa ser incluído tanto em código C quanto em C++ — use apenas .h. Sem alternativas.
  • Projetos conservadores. Em bases de código grandes, onde o estilo foi estabelecido ao longo dos anos, mudar as extensões para .hpp é uma dor de cabeça desnecessária.
  • Minimalismo. Três caracteres em vez de quatro. Um detalhe, mas é agradável.


Exemplo: cabeçalho compatível com C e C++



// math_utils.h#ifndef MATH_UTILS_H#define MATH_UTILS_H

#ifdef __cplusplusextern "C" {#endif

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

#ifdef __cplusplus}#endif

#endif // MATH_UTILS_H


Esse arquivo pode ser incluído tanto em .c quanto em .cpp. Se você o nomeasse math_utils.hpp, um programador C poderia ficar confuso: "Isso é realmente para mim?".



Quando usar .hpp?



Aqui é o oposto: .hpp é a escolha do programador C++ moderno. Especialmente se:



  • Você programa apenas em C++. Não há e não haverá C no projeto.
  • Você usa templates, STL, exceções. São recursos puramente C++, e a extensão .hpp enfatiza isso.
  • Você quer separar explicitamente o código C++ do C. Em projetos mistos, isso evita confusão.
  • Você segue práticas modernas. Boost, Qt (parcialmente), muitas bibliotecas novas usam .hpp.


Exemplo: cabeçalho C++ típico com classe



// player.hpp#ifndef PLAYER_HPP#define PLAYER_HPP

#include <string>#include <vector>

class Player {public: Player(const std::string& nam

Blogs

Book Recommendations