2012-04-27 13 views
16

Questa domanda può sembrare stupida. Ma mi piacerebbe sapere perché usiamo ".hh" come estensione per i file header C++ invece di usare solo ".h".C++: motivo per cui utilizzare ".hh" come estensione per i file di intestazione C++

I file di intestazione sono preelaborati e al preprocessore non interessa nemmeno l'estensione del file di intestazione. Quindi, anche io creo un file di intestazione con un'estensione ".qwe" (test.qwe). Quindi, perché usare ".hh" come estensione per i file di intestazione C++.

Alcuni dicono che stiamo usando ".cc" come estensione per i file C++ per differenziare dai file C (che ha un'estensione ".c"), analogamente stiamo usando ".hh" come estensione per i file di intestazione C++ per differenziare dai file header C (che ha un'estensione ".h"). Non penso che questo sia un motivo valido.

Qualcuno sa il motivo per nominare in questo modo.

+4

È solo una convenzione che alcune persone usano per differenziare le intestazioni destinate ai programmi C++ dalle intestazioni destinate ai programmi C. Niente di più. Se sia valido o meno si ridurrebbe in gran parte alle guerre religiose simili agli argomenti di posizionamento dei tutori. –

+0

Vedere anche http://stackoverflow.com/q/5122728/716443. Potrebbe essere un indizio per alcuni compilatori che l'intestazione sia per Objective C++. – DavidO

+1

'.hpp' è una scelta popolare per le intestazioni C++ ma io uso solo' .h' e '.cpp'. Questa è fondamentalmente una preferenza personale. – AJG85

risposta

25

Alcuni dicono, stiamo usando ".cc" come estensione per i file C++ per differenziare dai file C (che ha un ".c" estensione), allo stesso modo ci sono utilizzando ".hh" come estensione per i file di intestazione C++ per differenziare dai file di intestazione C (che ha un'estensione ".h").

Questo è esattamente il motivo. È solo per differenziare le intestazioni CPP dalle intestazioni C.

Alcuni programmatori e librerie, come Boost, utilizzano .hpp per le intestazioni CPP. La mia scelta personale è questa:

  • example.c
  • example.cpp
  • example.h
  • example.h ++

Anche se tutti appartengono ad un grande progetto, è può ancora capire quale è quale. Nessuna descrizione è necessaria.

5

È possibile denominare le intestazioni come si desidera, possono anche non avere alcuna estensione.

This FAQ menziona convenzioni di denominazione intestazione.

1

Non è per alcun motivo specifico, è solo una convenzione (specifica per sviluppatore o progetto specifico). Poiché "estensione del file" è solo una parte del nome, non importa molto, poiché i file di origine sono solo file di testo. Inoltre, i file di intestazione sono solo copia-incollato in file li ha inseriti (tramite #include, così estensione significa anche meno per loro.

biblioteche di Borland intestazioni avevano .hpp estensione. C++ 'header della libreria standard s hanno alcuna estensione a tutti. E' solo una questione di convenzione e di gusto personale.

1

Questo è completamente convenzionale, non c'è un motivo particolare per questo. Di solito le persone cercano di rimanere coerenti all'interno di un progetto, o attraverso team o addirittura un'intera azienda. Aiuta gli sviluppatori che prendono il tuo codice dopo che sei passato da tempo a capire che abc.hh va con il file abc.cc e abc.h va con abc.c.

1

Un motivo, se sto creando una DLL che ha un'API C attorno a un mucchio di codice C++, ho bisogno di differenziare tra le mie intestazioni C che il client può usare per importare le funzioni C e le mie intestazioni interne di C++ che io esplicitamente non voglio consentire al client di importare.

Il collegamento a una funzione C è piuttosto semplice dalla maggior parte delle lingue/ambienti con quasi nessun sovraccarico. Non devi pensare a tutte le complessità ereditate da C++. Quindi, se dovessi lavorare con una tale libreria, sarei sicuro di separare il mio C++ dalla mia interfaccia C.

1

Penso che sia per lo più una convenzione sociale.

Tuttavia, recenti compilatori GCC sono in grado di compilare un'intestazione (singolo) foo.hh o foo.h in qualcosa come foo.hh.gch o foo.h.gch che contiene essenzialmente un'immagine residua mucchio memoria del compilatore (il programma cc1plus avviato da g++) dopo aver analizzato quell'intestazione.

Si noti che la libreria standard C++ 11 definisce i file di intestazione come ad es. <vector> senza alcuna estensione.

Problemi correlati