Il nostro strumento di analisi statica si lamenta "un qualificatore di tipo inutile su tipo di ritorno" quando abbiamo prototipi in file di intestazione, quali:Si dovrebbero usare qualificatori di tipo inutili sui tipi di ritorno, per chiarezza?
const int foo();
Abbiamo definito in questo modo perché la funzione restituisce una costante che non cambierà mai , pensando che l'API sembrava più chiara con const
sul posto.
Mi sembra che questo sia simile all'inizializzazione esplicita delle variabili globali a zero per chiarezza, anche se lo standard C già afferma che tutti i globali saranno inizializzati a zero se non inizializzati esplicitamente. Alla fine della giornata, non importa. (Ma lo strumento di analisi statica non si lamenta di quello.)
La mia domanda è, c'è qualche motivo che questo potrebbe causare un problema? Dovremmo ignorare gli errori generati dallo strumento o dovremmo placare lo strumento al costo possibile di un'API meno chiara e coerente? (Restituisce altre costanti const char*
con cui lo strumento non ha problemi.)
concordato. La mia reazione istantanea a un tipo di ritorno const è di presupporre che il ritorno sia un riferimento/puntatore a un buffer condiviso che non dovrebbe essere modificato. Il mio modello mentale è che const si applica al contenitore (ad es. Variabile), non al contenuto. Ad esempio, in "const char *" il const si applica alla stringa puntata, mentre se hai "const int i = 5;", puoi ancora scrivere "i + 1" in un'espressione - puoi lavorare con valore finché non provi a cambiare la variabile. Con un semplice ritorno int, non hai un contenitore, solo un valore. – Steve314
Immagino che le persone vengano confuse a causa del comportamento strano della parola chiave 'const'. Voglio dire che 'const char * c' e' char const * c' sono la stessa cosa. Se la precedente sintassi non fosse legale, le cose sarebbero molto meno confuse. Avremmo solo 'char const * c' e' char * const c' e tutti saprebbero cosa sta succedendo. Forse ci sto pensando troppo. –
Ok, sono convinto. Grazie per aver segnalato l'avviso GCC. Vorrei che sarebbe stato un errore piuttosto che un avvertimento, quindi aree grigie come questa non si presentano. – mpontillo