Per quanto riguarda la mia attuale comprensione della parola chiave 'statica', impedisce che una variabile venga reinizializzata E impedisce alla variabile di lasciare la memoria quando una funzione termina.Ha senso utilizzare variabili statiche nella funzione principale in C?
In C, di solito uso questo quando una variabile non ha bisogno di essere globale, ma anche non dovrebbe cambiare tra le chiamate di funzione. (Microcontrollore F.I. interrompe)
Ora, in qualche codice C per uno STM32, ho visto il seguente:
int main(void)
{
static char buffer[CONSOLEBUFFERSIZE];
...
Per me, questo non ha senso. Questa variabile viene utilizzata per bufferizzare i comandi in entrata per processarli quando viene ricevuto il carattere di terminazione. Ma le due proprietà di "statico" che ho descritto in precedenza non si applicano alla funzione principale perché main() viene chiamato solo una volta e "mai" finisce. Quindi, la mia domanda attuale:
Potrebbe utilizzare un hocus-pocus che non conosco o sarebbe semplicemente copiato il codice da un'interruzione o da un'altra funzione e i programmatori hanno dimenticato o non si sono preoccupati di rimuovere la parola chiave statica ?
se CONSOLVERBUFFERSIZE è molto grande, lo stack può oltrepassare il flusso, quindi utilizzare la statica è sicuro. – sigmalha
Un compilatore C non è obbligato a mettere le variabili di 'main()' nello spazio "stack". Pertanto l'uso di 'static' per spostare una variabile dallo" stack "al segmento" data "dipende dall'implementazione del compilatore. 'static' può cambiare il segmento come suggerito da alcune risposte. Potrebbe anche non avere alcun effetto. – chux