Learning GNU C: il buon codice | ALTRI capitoli | ||||
E' una delle qualità più importanti, quando si parla di buon codice, e, fortunatamente, è un'arte che diventa naturale con la pratica. Uno dei più grandi nemici della leggibilità è il codice "intelligente". Restringendo più operazioni in una sola riga o in un unico costrutto potrebbe sembrare una conquista, ma quando qualcuno provasse a leggerlo, quel codice lo bloccherebbe, soprattutto se quel qualcuno dovesse provare a districare tutte quelle operazioni, almeno nella propria testa. C è conosciuto per essere il linguaggio di programmazione di alto livello più veloce esistente. Due sono i momenti in cui avrete bisogno di ottimizzare il vostro codice: quando lo scrivete e subito dopo essere rimasti delusi dalle sue prestazioni. Come regola, si dice che il novanta per cento del tempo di esecuzione di un'applicazione è dedicato al dieci per cento del suo codice sorgente. C'è poco da ottimizzare in una funzione che viene invocata solo raramente. Gli attributi di una funzione sono un'estensione GCC al linguaggio C. Permettono di dare a GCC più informazioni relative ad una funzione. Queste informazioni possono essere utilizzate per vari scopi, compresi l'ottimizzazione ed una verifica più stringente. Gli attributi di una funzione vengono specificati nel corso della dichiarazione di funzione. Dopo la chiusura delle parentesi che contengono gli argomenti della funzione, la keyword:
viene fatta seguire dagli attributi desiderati, compresi tra doppie parentesi. Ecco una funzione con l'attributo "pure":
Le funzioni possono avere più attributi, l'uno separato dall'altro da una virgola, tutti all'interno delle doppie parentesi. Una funzione "pure" è una funzione che non ha alcuna influenza all'esterno del suo stesso scope ( portata ). Questo significa che la funzione può leggere le variabili globali o le variabili di cui sono stati passati i puntatori, ma non potrà mai sovrascriverne i valori. Una funzione "pure" non può leggere le variabili volatili o le risorse esterne ( come i files ). L'attributo "const" è una versione più stringente di "pure": dice a GCC che una funzione non dovrà leggere alcun dato, eccetto i dati delle variabili che le sono state passate. Una funzione "const" non potrà leggere il dato referenziato da un puntatore passatole come argomento. Il solo effetto che una funzione "pure" o "const" possa avere sul vostro programma è nel valore restituito. Una funzione di questo tipo, che avesse un valore di ritorno di tipo "void" sarebbe una funzione senza scopo, inutile. GCC può utilizzare queste informazioni per eseguire una operazione definita "common subexpression elimination" (!). Significa che GCC può chiamare la funzione meno volte di quanto gli sia stato chiesto di fare, visto che GCC sa che il valore restituito dalla funzioone sarà sempre lo stesso. Per esempio: se aveste una funzione che converte i Celsius in Fahrenheit, e che fosse stata inserita in un loop che calcola sempre lo stesso valore, GCC potrebbe sostituire la chiamata alla funzione con il valore restituito. GCC sa che questo metodo è sicuro, se la funzione di conversione è una funzione "const".
|
|||||
Learning GNU C: il buon codice | Disclaimer: questo è un link a contenuti ospitati su server esterni. |