Recentemente ho scritto un pezzo di codice C così:Dovrei considerare che dichiarare tutte le funzioni statiche C è una buona pratica?
static void func1()
{
}
static void func2()
{
}
typedef void (*func_t)(void);
const func_t lookUpTable[FUNC_COUNT] =
{
[FUNC1] = &func1,
[FUNC2] = &func2
}
Un altro programmatore ha lavorato sullo stesso file e lo cambiò in:
static void func1();
static void func2();
typedef void (*func_t)(void);
const func_t lookUpTable[FUNC_COUNT] =
{
[FUNC1] = &func1,
[FUNC2] = &func2
}
static void func1()
{
}
static void func2()
{
}
Dal momento che i funcN funzioni vengono chiamate solo tramite la tabella di ricerca, in realtà non ho bisogno delle dichiarazioni di quelle funzioni.
È una questione di gusto o esiste uno stile di codifica considerato una buona/cattiva pratica?
Grazie per le vostre risposte!
"In realtà non ho bisogno delle dichiarazioni" - Lo fai ancora! Senza di te non puoi usare tem nella tua tabella. Omettere 'static' OTOH non rende _declaration_ extern, solo il nome/simbolo. – Olaf
C'è forse un problema di vocabolario qui. È meglio se dico "Non ho bisogno dei prototipi"? Intendo quando * definisco * le funzioni che sono * dichiarate * allo stesso tempo. Fa parte del tuo punto? Riguardo l'ultima parte del tuo commento: significa che senza 'static', il nome/simbolo sarebbe pubblico. Quindi, se questo nome viene utilizzato in un'altra unità di traduzione, la compilazione si interrompe perché non è stato possibile trovare il corpo/implementazione (?)? – Plouff
1) usare '@ nome' per aggiungere un commento in modo affidabile. Il tuo ultimo commento non mi rende più chiaro. Forse il mio commento originale diventa più chiaro mantenendo a metà che tendo ad usare il vocabolario standard di C. Basta dare un'occhiata. E tu ** fai ** bisogno dei prototipi (che ** sono ** _declarations_). E senza 'static', un nome dichiarato a scope-scope ha _esterno linkage_. Il termine "pubblico" non è usato dallo standard (e ha un significato diverso, ad esempio in C++). – Olaf