Sto scrivendo un programma C e dichiaro tutte le funzioni che sono visibili all'esterno di ciascuna unità di compilazione nei file .h appropriati. Tuttavia, ho anche alcune funzioni statiche in ogni unità di compilazione. Preferirei non dover ordinare le funzioni statiche in un modo particolare. Devo dichiarare tutte le funzioni statiche nei file di intestazione o semplicemente inserire tutte le dichiarazioni statiche nella parte superiore di ciascun file di implementazione?C: È buona norma inserire prototipi di funzioni statiche nei file di implementazione?
risposta
I file di intestazione devono essere una sorta di "menu" che indica ad altri file di origine quali funzioni, tipi, ecc. Vengono esportati dal modulo. Quando possibile, non si deve perdere alcuna informazione circa le implementazioni interne nel file di intestazione, dal momento che rende il codice più difficile da modificare (se un cliente della vostra intestazione tenta di utilizzare una funzione che si dovesse successivamente rimuovere) e più difficile da usare (perché il lettore deve setacciare i prototipi di funzioni private per trovare le funzioni effettivamente esportate).
Pertanto, è meglio mettere prototipi per le funzioni che sono private di un file sorgente nella parte superiore del file sorgente piuttosto che nel file di intestazione corrispondente.
Spero che questo aiuti!
Nel caso in cui siano necessarie queste funzioni statiche in più unità di compilazione, inserire le loro dichiarazioni nel file di intestazione, che è incluso da tutti i file, in cui sono necessarie queste funzioni. Non copiarli e incollarli su altri file .c
(non ripetere l'operazione).
Se esiste una funzione, che viene utilizzata solo all'interno di una singola unità di compilazione, non c'è niente di sbagliato nel dichiararlo e definirlo nello stesso file .c
. In realtà è ancora meglio visto che non stai esponendo ciò che non è destinato a essere esposto.
- 1. È buona norma usare size_t in C++?
- 2. È buona norma estendere NSError
- 3. è buona norma chiudere i descrittori di file all'uscita
- 4. È buona norma nascondere la definizione della struttura in C?
- 5. È buona norma impostare allowCoreThreadTimeOut() in ThreadPoolExecutor?
- 6. È buona norma usare spesso instanceof?
- 7. È buona norma utilizzare rawQuery in ContentProvider?
- 8. È buona norma usare enum come int?
- 9. È buona norma bloccare un mutex pthread prima di distruggerlo?
- 10. Dovrei considerare che dichiarare tutte le funzioni statiche C è una buona pratica?
- 11. è considerata una buona pratica avere condizionali nei file di intestazione pubblici?
- 12. Dove trovare facilmente i prototipi di funzioni standard C
- 13. È buona norma utilizzare costanti, tipi e funzioni globali all'interno delle classi VBA?
- 14. questa implementazione di merge sort è buona?
- 15. È buona norma creare sempre un file .cpp per ogni .h in un progetto C++?
- 16. È buona norma usare jQuery nel progetto Angular JS?
- 17. È buona norma includere la configurazione XML nel classpath Java?
- 18. Come fa un compilatore C/C++ a trovare le definizioni dei prototipi nei file di intestazione?
- 19. Variabili private nei prototipi ereditati
- 20. Qual è la differenza tra celle statiche e prototipi dinamici?
- 21. Interfaccia C# e implementazione nello stesso file - buona idea?
- 22. Implementazione delle funzioni di callback in C
- 23. È buona norma utilizzare l'espressione regolare per la convalida dell'input?
- 24. È buona norma sovrascrivere fetch() e save() direttamente dal modello?
- 25. È buona norma per un record Clojure implementare IFn?
- 26. È buona norma usare indici invertiti su chiavi surrogate? (Oracle)
- 27. È buona norma avere una query linq in Controller?
- 28. È buona norma passare lo stato come sostegno ai bambini?
- 29. È buona norma memorizzare il token csrf nel meta tag?
- 30. È buona norma rimuovere i riferimenti per aiutare il GC?
Grazie. Sospettavo tanto, è bello avere una conferma chiara. – Dmitri