Probablemente nunca diría nunca, pero las declaraciones que generan datos y códigos a medida que se analizan no deberían estar en un archivo .h.
Las macros, las funciones en línea y las plantillas pueden parecerse a datos o código, pero no generan código cuando se analizan, sino cuando se usan. Estos elementos a menudo deben usarse en más de un .c o .cpp, por lo que pertenecen a .h.
En mi opinión, un archivo de encabezado debe tener la interfaz práctica mínima para un .c o .cpp correspondiente. La interfaz puede incluir #defines, clase, typedef, definiciones de estructura, prototipos de funciones y definiciones externas menos preferidas para variables globales. Sin embargo, si una declaración se usa en un solo archivo de origen, probablemente debería excluirse de la .h y estar contenida en el archivo de origen.
Algunos pueden estar en desacuerdo, pero mi criterio personal para los archivos .h es que #incluyen todos los demás archivos .h que necesitan para poder compilar. En algunos casos, esto puede ser una gran cantidad de archivos, por lo que contamos con algunos métodos efectivos para reducir las dependencias externas, como las declaraciones de reenvío a clases, que nos permiten usar punteros a objetos de una clase sin incluir lo que podría ser un gran árbol de archivos de inclusión. / p>