I file di intestazione C ++ senza estensione sono una buona pratica?

9

Ho una discussione con un mio collega riguardo le linee guida del C ++ da seguire.

Attualmente progetta tutte le sue librerie in questo modo:

  • Utilizza lettere maiuscole e minuscole incongruenti nei suoi nomi di file
  • Alcune delle sue intestazioni non hanno alcuna estensione

Credo che non avere un'estensione sia qualcosa di riservato per i file standard C ++ e che l'uso di lettere maiuscole sia soggetto a errori (specialmente quando si ha a che fare con codice che ha lo scopo di funzionare su Windows e Linux).

Il suo punto è che segue le convenzioni Qt (anche per il codice che non usa Qt) e continua a dire: "Se Qt fa così, allora non può essere cattivo."

Ora provo a mantenere una mente aperta, ma mi sento davvero male quando devo lavorare su / con le sue librerie. Esiste un insieme stabilito di regole comuni in merito? Lo standard dice qualcosa al riguardo?

Grazie mille.

    
posta ereOn 17.02.2012 - 09:50
fonte

5 risposte

16

L'estensione (o la mancanza di) non lo farà, per quanto ne so, causa problemi. Direi che abbandonare del tutto l'estensione è scomodo in quanto rende difficile la ricerca dei file di intestazione (ad esempio con i caratteri jolly * .h e * .hpp) e rende più difficile identificare il contenuto di un file (ad esempio se il tuo editor si basa sull'estensione per scegliere la modalità di evidenziazione della sintassi corretta.

Da un punto di vista del codice non fa molta differenza, anche l'involucro non è problematico fintanto che si usa un caso coerente ovunque e non si basano solo sulle differenze tra maiuscole e minuscole per differenziare i file. Dal punto di vista della praticità è più facile attenersi alle minuscole e avere un'estensione (o .h o .hpp).

Ancora più importante è che scelga una convenzione per l'intero team di sviluppo e si attenga a essa . È molto peggio cercare il nome di un file, il nome e l'estensione che usa ogni volta che vuoi includere qualcosa - tutti questi dovrebbero essere "indovinati" con la conoscenza della cosa che stai cercando di usare.

    
risposta data 17.02.2012 - 10:07
fonte
6

Non esiste una regola (nello standard) che solo i file di intestazione standard possano essere senza un'estensione; il nome del file può essere praticamente qualsiasi cosa tu volere. Le buone prassi generali, tuttavia, suggeriscono che:

  1. nessun file è mai senza un'estensione e

  2. diversi tipi di file hanno estensioni diverse In particolare, le intestazioni C ++ usano un'estensione diversa ( .hpp o .hh ) rispetto a intestazioni accettabili per un compilatore C.

(Purtroppo, la seconda regola viene spesso violata e spesso si vede il C ++ file di intestazione con .h . Per esperienza personale, posso assicurarlo ciò causerà problemi di manutenzione lungo la strada, ma è comune pratica.)

Per quanto riguarda il caso, è necessaria un'estrema cura, poiché i nomi dei file sono un caso sensibile in alcuni sistemi e non in altri. Ne ho visti due diversi regole che funzionano: o tutto in minuscolo nel nome del file, o il nomefile segue esattamente le stesse regole per quanto riguarda i simboli in C ++.

In entrambi i casi, stabilite le regole per il progetto, per consenso e tutti li seguono.

    
risposta data 17.02.2012 - 10:37
fonte
6
If Qt does it that way, then it can't be bad.

Sì. Sì, davvero, davvero può. Il loro design di biblioteca è "Vogliamo essere Java". È un disastro totale. La libreria standard è molto meglio.

Inoltre, fondamentalmente, è un errore logico. Il design di Qt vale la pena emulare solo se puoi dare argomentazioni logiche sul perché è buono, non va bene solo perché è Qt.

    
risposta data 18.02.2012 - 05:03
fonte
0

Come so, dal 1998 standard, solo le intestazioni di libreria standard sarebbero senza .h. Quindi i file di intestazione C ++ non standard sono convenzionalmente scritti con .h. Ricorda però che è una convenzione, non puoi usare alcuna estensione o estensione .txt, è come se scrivessi le tue classi iniziando con lettere minuscole, funziona ancora, ma non è la convenzione.

    
risposta data 17.02.2012 - 09:56
fonte
0

Queste sono convenzioni e non ci sono vincoli per aderire alle convenzioni, ma le convenzioni rendono la vita più facile quando ti trovi per riferimento.

come per le estensioni (.h, .hpp) quei file che sono stati inclusi nel c ++ non hanno bisogno di estensioni, è necessario usare le estensioni se si usano le intestazioni da diverso da c ++, come librerie c o librerie di boost .

    
risposta data 17.02.2012 - 11:06
fonte

Leggi altre domande sui tag