Saltar al contenido

*.h o *.hpp para sus definiciones de clase

No dudes en divulgar nuestro sitio y códigos con tus amigos, ayúdanos a aumentar nuestra comunidad.

Solución:

Aquí hay un par de razones para tener diferentes nombres de encabezados C vs C++:

  • Formateo automático de código, es posible que tenga diferentes pautas para formatear el código C y C++. Si los encabezados están separados por extensión, puede configurar su editor para que aplique el formato apropiado automáticamente
  • Nombrando, he estado en proyectos donde había bibliotecas escritas en C y luego se habían implementado contenedores en C++. Dado que los encabezados generalmente tenían nombres similares, es decir, Feature.h vs Feature.hpp, eran fáciles de diferenciar.
  • Inclusión, tal vez su proyecto tenga versiones más apropiadas disponibles escritas en C++ pero está usando la versión C (ver el punto anterior). Si los encabezados tienen el nombre del idioma en el que están implementados, puede detectar fácilmente todos los encabezados C y verificar las versiones de C++.

Recuerda, C es no C++ y puede ser muy peligroso mezclar y combinar a menos que sepa lo que está haciendo. Nombrar sus fuentes apropiadamente lo ayuda a diferenciar los idiomas.

Uso .hpp porque quiero que el usuario diferencie qué encabezados son encabezados de C++ y qué encabezados son encabezados de C.

Esto puede ser importante cuando su proyecto usa módulos C y C++: como alguien más explicó antes que yo, debe hacerlo con mucho cuidado y comienza con el “contrato” que ofrece a través de la extensión.

.hpp: encabezados de C++

(O .hxx, o .hh, o lo que sea)

Este encabezado es solo para C++.

Si está en un módulo C, ni siquiera intente incluirlo. No le gustará, porque no se hace ningún esfuerzo para que sea compatible con C (se perdería demasiado, como sobrecarga de funciones, espacios de nombres, etc., etc.).

.h: encabezados C puros o compatibles con C/C++

Este encabezado puede ser incluido tanto por una fuente C como por una fuente C++, directa o indirectamente.

Puede incluirse directamente, estando protegido por la __cplusplus macro:

  • Lo que significa que, desde el punto de vista de C++, el código compatible con C se definirá como extern "C".
  • Desde el punto de vista de C, todo el código de C será claramente visible, pero el código de C++ estará oculto (porque no se compilará en un compilador de C).

Por ejemplo:

#ifndef MY_HEADER_H
#define MY_HEADER_H

   #ifdef __cplusplus
      extern "C"
      
   #endif

   void myCFunction() ;

   #ifdef __cplusplus
       // extern "C"
   #endif

#endif // MY_HEADER_H

O podría incluirse indirectamente en el encabezado .hpp correspondiente encerrándolo con el extern "C" declaración.

Por ejemplo:

#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP

extern "C"

#include "my_header.h"


#endif // MY_HEADER_HPP

y:

#ifndef MY_HEADER_H
#define MY_HEADER_H

void myCFunction() ;

#endif // MY_HEADER_H

Siempre consideré la .hpp cabecera para ser una especie de baúl de viaje de .h y .cpp archivos… un encabezado que contiene detalles de implementación también.

Por lo general, cuando he visto (y uso) .hpp como una extensión, no hay correspondiente .cpp Archivo. Como han dicho otros, esta no es una regla estricta y rápida, solo cómo tiendo a usar .hpp archivos

Te mostramos reseñas y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *