2013-01-18 14 views
5

Sto cercando di capire come utilizzare const nel codice C. Per prima cosa non mi sono preoccupato di usarlo, ma poi ho visto alcuni esempi di const usati in tutto. Devo fare uno sforzo e tornare indietro e fare religiosamente variabili appropriate const? O rimarrò semplicemente il mio tempo?Come utilizzare al meglio la parola chiave const in C?

Suppongo che sia più facile leggere quali variabili sono previste che cambiano, specialmente nelle chiamate di funzione, sia per gli utenti che per il compilatore. Mi mancano altri punti importanti?

+1

comunque è tutto variabile. const è solo, come dici tu, un suggerimento che il valore assegnato non dovrebbe essere cambiato. ma puoi giocare con i puntatori e quant'altro per cambiare quel valore dietro al compilatore: http://stackoverflow.com/questions/3801557/can-we-change-the-value-of-a-constant-through-pointers –

+0

Correlati : [Sell me on const correctness] (http://stackoverflow.com/questions/136880/sell-me-on-const-correctness) (è C++, ma è anche rilevante per C). – netcoder

+0

Non mi preoccuperei di tornare indietro alle applicazioni che funzionano e hai finito. Se avete le librerie, non sarebbe male farle usare 'const'. In alcuni punti dovresti rinunciare però. Ad esempio 'const' e gli array multidimensionali funzionano davvero terribilmente insieme. – Shahbaz

risposta

5

const è digitato, #define non lo sono.

const è con ambito C, #define si applica a un file.

const è molto utile con il passaggio dei parametri. Se vedi un const utilizzato su un prototipo con puntatori, sai che è sicuro passare la tua matrice o struttura perché la funzione non la altererà. No const e può.

Esaminare la definizione come strcpy() e vedrete cosa intendo. Applicare "const-ness" per far funzionare i prototipi all'inizio. Retro-fitting const non è così difficile come "molto lavoro" (ma OK se vieni pagato all'ora).

Considera anche:

const char *s = "Hello World"; 
char *s = "Hello World"; 

che è corretto, e perché?

+0

Quindi nel tuo esempio presumo che non possa cambiare la parte '' Hello World ''nella prima riga (ma posso fare in modo che' s' punti ad un'altra stringa del tutto), è corretto? Ho visto questa notazione anche qua e là, è come le stringhe (cioè gli array di 'char ') dovrebbero essere istanziate? – c00kiemonster

+0

@ c00kiemonster: se il contenuto può essere modificato, non renderlo 'const'. Ma nell'esempio sopra, 's' * è * una costante e quindi non può essere modificata. –

+1

@ c00kiemonster: sì, il primo esempio, con 'const' è corretto. Il secondo esempio è errato ma sfortunatamente comune. Porterebbe a un tentativo di alterare la memoria di sola lettura (crash!). Molto tempo fa, Visual Studio 5 lo ha permesso e ha dato alcuni effetti "interessanti". – cdarke

1

L'utilizzo di const non è solo una buona pratica, ma migliora la leggibilità e la comprensibilità del codice e aiuta a prevenire alcuni errori comuni. Sicuramente usare const se appropriato.

6
How do I best use the const keyword in C? 

Usa const quando si vuole rendere "sola lettura". È così semplice :)

Problemi correlati