2013-10-07 11 views
5

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

7

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!

+1

Grazie. Sospettavo tanto, è bello avere una conferma chiara. – Dmitri

2

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.

Problemi correlati