Tengo una discusión con un colega mío sobre las pautas de C ++ a seguir.
Actualmente diseña todas sus bibliotecas de esa manera:
- Utiliza inconsistentemente letras mayúsculas y minúsculas en sus nombres de archivo
- Algunos de sus encabezados no tienen ninguna extensión
Creo que no tener extensión es algo reservado para los archivos estándar de C ++ y que el uso de letras mayúsculas es propenso a errores (especialmente cuando se trata de código que debe funcionar tanto en Windows como en Linux).
Su punto es que sigue las Qt
convenciones (incluso para el código que no usa Qt) y sigue diciendo: "Si Qt lo hace de esa manera, entonces no puede ser malo".
Ahora trato de mantener una mente abierta, pero realmente me siento mal cuando tengo que trabajar en / con sus bibliotecas. ¿Existe un conjunto común de reglas establecidas al respecto? ¿La norma dice algo al respecto?
Muchas gracias.
#define signal
... ... ... ("Si Qt lo hace así, entonces no puede ser malo") - No puedo decir que personalmente estoy de acuerdo con todas sus opciones de diseño.Qt
. Incluso creo que es una biblioteca increíble, pero algunas de sus opciones de diseño realmente me parecen incorrectas._
código popular y ampliamente utilizado, pero definitivamente está en contra del estándar.*.hpp
para un encabezado c ++, y todas mis herramientas "lo entiendo".Respuestas:
La extensión (o falta de) no va a, por lo que sé, causarle problemas. Diría que descartar la extensión por completo es inconveniente ya que dificulta la búsqueda de archivos de encabezado (por ejemplo, con los comodines * .h y * .hpp) y hace que sea más difícil identificar el contenido de un archivo (por ejemplo, si su editor confía en la extensión para elegir el modo de resaltado de sintaxis adecuado).
Desde el punto de vista del código, no hace mucha diferencia, incluso la carcasa no es problemática siempre que use un caso coherente en todas partes y no confíe solo en las diferencias de casos para diferenciar los archivos. Desde el punto de vista de la conveniencia, es más fácil quedarse con minúsculas y tener una extensión (ya sea .h o .hpp).
Sin embargo, es más importante que cualquiera de los anteriores es elegir una convención para todo su equipo de desarrollo y cumplirla . Es mucho peor tener que buscar cómo se encajona un archivo, qué nombre se usa y qué extensión usa cada vez que desea incluir algo; todo esto debe ser "adivinable" con conocimiento de lo que está tratando de usar.
fuente
No hay una regla (en el estándar) que solo los archivos de encabezado estándar pueden estar sin una extensión; el nombre del archivo puede ser casi todo lo que quieras. Sin embargo, las buenas prácticas generales sugieren que:
nunca hay archivos sin una extensión, y
diferentes tipos de archivos tienen diferentes extensiones, en particular, los encabezados de C ++ usan una extensión (
.hpp
o.hh
) diferente que los encabezados que son aceptables para un compilador de C.(Lamentablemente, la segunda regla a menudo se viola, y a menudo se ven archivos de encabezado C ++
.h
. Por experiencia personal, puedo asegurar que esto causará problemas de mantenimiento en el futuro, pero es una práctica común).Con respecto al caso, se requiere un cuidado extremo, ya que los nombres de archivo distinguen entre mayúsculas y minúsculas en algunos sistemas, y no en otros. He visto dos reglas diferentes que funcionan: o todo en minúsculas en el nombre del archivo, o el nombre del archivo sigue exactamente las mismas reglas con respecto a mayúsculas y minúsculas que para los símbolos en C ++.
En ambos casos, usted establece reglas para el proyecto, por consenso, y todos las siguen.
fuente
Si. Sí, realmente puede. El diseño de su biblioteca es "Tenemos muchas ganas de ser Java". Es un desastre total. La biblioteca estándar es mucho mejor.
Además, fundamentalmente, es una falacia lógica. El diseño de Qt solo vale la pena emular si puedes dar argumentos lógicos sobre por qué es bueno, no es bueno solo porque es Qt.
fuente
Como sé, desde el estándar de 1998, solo los encabezados de la biblioteca estándar estarían sin .h. Por lo tanto, los archivos de encabezado C ++ no estándar todavía se escriben convencionalmente con .h. Pero tenga en cuenta que es una convención, no puede usar ninguna extensión o incluso la extensión .txt, es como si escribiera sus clases comenzando con minúsculas, todavía funciona, pero no es la convención.
fuente
Estas son convenciones, no reglas, no hay restricciones para adherirse a las convenciones, pero las convenciones hacen la vida más fácil cuando se busca referencia.
según las extensiones (.h, .hpp), los archivos que se han incluido en c ++ no necesitan tener extensiones, debe usar las extensiones si está usando encabezados que no sean c ++, como las bibliotecas de c o las bibliotecas de impulso.
fuente