Gli indici, i limiti, i limiti, ecc. sono sempre correlati alla sicurezza con il codice C a causa di problemi di sfruttamento dell'overflow. In particolare, se ottieni il numero sbagliato, il codice è un candidato per lo sfruttamento.
Assegnare la costante a un simbolo fa due cose: rende il numero più facile da verificare in una revisione perché è immediatamente ovvio che cosa significa il numero e, cosa più importante, garantisce che ogni volta che usi il numero nel tuo codice, tu stai usando il valore SAME.
Immaginate, per esempio, dove il numero rappresenti la lunghezza del campo di input, e ad un certo punto aumenti quella lunghezza per accogliere nomi più grandi. Se hai specificato il valore numericamente nel tuo codice, devi rintracciare ogni istanza di quel numero e sostituirlo, ma solo se l'istanza di quel numero rappresenta il tuo campo specifico (non puoi semplicemente usare la ricerca e sostituire cambia ogni istanza da 128 a 256 perché il numero potrebbe significare cose diverse).
Inoltre, in alcuni casi potresti utilizzare N + 1 (ad esempio per consentire la terminazione), quindi dovresti rintracciare ogni istanza di 128 e ogni istanza di 129. E c'era un motivo per specificare 130 come bene? Oh, ora è difficile da ricordare. Ma non perderti nessuno di essi creerai un classico exploit di buffer overflow.
Se invece hai appena fatto #define FIRST_NAME_LENGTH 128
in uno dei tuoi file di inclusione e hai eliminato tutti i valori corrispondenti, puoi semplicemente cambiare il numero una volta e completarlo.
Questo è vero anche nei casi in cui si usa il numero una sola volta, perché mentre si sta ATTUALMENTE solo usando il numero una volta, qualcuno potrebbe aver bisogno di estendere il codice in futuro.
Questo è un problema così importante che dovresti aver imparato dal primo giorno per evitare "numeri magici" nel tuo codice. Se il numero "significa" qualcosa, dovresti renderne esplicito il significato.