Qual è un buon riferimento per documentare i modelli d'uso di & # 8220; .h & # 8221; file in C? [duplicare]

StackOverflow https://stackoverflow.com/questions/256277

  •  05-07-2019
  •  | 
  •  

Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              Dovrei usare #include nelle intestazioni?                                      9 risposte                          
  •     
    

" C Interfacce e implementazioni " mostra alcuni schemi di utilizzo interessanti per le strutture dati, ma sono sicuro che ce ne sono altri là fuori.

http://www.amazon.com/Interfaces-Implementations-Techniques-Addison -Wesley-professionale / dp / 0201498413

È stato utile?

Soluzione

Guarda lo standard di codifica C del Goddard Space Flight Center (NASA) (questo URL ). Ha alcune linee guida buone e interessanti.

Una linea guida specifica, che ho adottato per il mio codice, è che le intestazioni dovrebbero essere autosufficienti. Cioè, dovresti essere in grado di scrivere:

#include "header.h"

e il codice dovrebbe essere compilato correttamente, includendo tutte le altre intestazioni necessarie, indipendentemente da ciò che è accaduto prima. Il modo semplice per garantire ciò è includere l'intestazione nell'origine dell'implementazione, come prima intestazione. Se viene compilato, l'intestazione è autonoma. Se non si compila, sistemare le cose in modo che lo faccia. Ovviamente, ciò richiede anche che le intestazioni siano idempotenti: funzionano allo stesso modo indipendentemente dalla frequenza con cui sono incluse. C'è un linguaggio standard anche per questo:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */

È indispensabile, ovviamente, avere #define nella parte superiore del file, non nella parte inferiore. Altrimenti, se un'intestazione inclusa include anche header.h, allora si finisce con un ciclo infinito - non salutare. Anche se decidi di seguire una strategia di:

#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */

nel codice che include l'intestazione - una pratica che è non consigliata - è importante includere anche le protezioni nell'intestazione stessa.


Aggiornamento 01/05/2011

L'URL GSFC sopra non funziona più. Puoi trovare ulteriori informazioni nelle risposte alla domanda Dovrei usare #include nelle intestazioni , che contiene anche un riferimento incrociato a questa domanda.

Aggiornamento 24/03/2012

È possibile accedere e scaricare lo standard di codifica C della NASA di riferimento tramite l'archivio Internet:

http : //web.archive.org/web/20090412090730/http:? //software.gsfc.nasa.gov/assetsbytype.cfm TypeAsset = standard

Altri suggerimenti

Makeheaders è un approccio interessante: utilizzare uno strumento per generare le intestazioni. Makeheaders è usato in cvstrac di DR Hipp e fossile .

Potresti dare un'occhiata al C ++ Software Design su larga scala di John Lakos.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top