Io in genere uso due dei tre const
s:
const char *const *my_strings;
volte vorrei usare tutti e tre, ma a mio parere l'ultimo è il meno importante. Aiuta solo ad analizzare il codice che utilizza la variabile my_strings
, mentre gli altri due aiutano ad analizzare il codice che ha un puntatore all'array puntato da my_strings
o alle stringhe puntate dagli elementi di quell'array. Questo è generalmente più codice, in diversi luoghi (ad esempio il chiamante di una funzione e la funzione stessa), e quindi un compito più difficile.
Il codice che utilizza la variabile stessa è limitato all'ambito di my_strings
, quindi se questa è una variabile automatica (incluso un parametro di funzione), allora è un compito ben contenuto e facile. L'aiuto fornito contrassegnandolo con const
potrebbe ancora essere apprezzato, ma è meno importante.
Direi anche che se char const * const * const my_strings
è "quasi illeggibile", allora questo cambierà quando avrai più pratica nella lettura di C, ed è meglio ottenere quella pratica che cambiare il codice. C'è un certo valore nella scrittura del codice C che può essere letto facilmente dai principianti, ma non tanto quanto quello che c'è nel lavoro svolto ;-)
Si potrebbe usare typedefs per rendere la definizione della variabile più corta, al costo di l'introduzione di un riferimento indiretto che infastidire molti programmatori C:
typedef char const *ro_strptr;
ro_strptr const *my_strings;
per qualsiasi motivo, i programmatori C spesso vogliono vedere il più possibile di un tipo in un unico luogo. Solo quando il tipo diventa veramente complicato (tipi puntatore-a-funzione) puoi usare un typedef solo per abbreviare, senza aspettarti che qualcuno si lamenti di ciò.
fonte
2012-08-09 00:17:25
Per la seconda metà della domanda, consultare la [comp.lang.c Domande frequenti 11.10] (http://c-faq.com/ansi/constmismatch.html) –
@JohnBartholomew: Grazie. Non mi rendevo conto che avrei potuto semplicemente trasmettere per far sparire il messaggio. – mk12
Sì, 'const' dovrebbe essere probabilmente il valore predefinito. Credo che Bjarne Stroustup abbia detto la stessa cosa ma ha dovuto mantenere la retrocompatibilità con C. Esiste già una parola chiave 'mutabile'. – bames53