ProgrammazioneSviluppatore Embedded C

Cosa sai dei modificatori di archiviazione 'register' e 'auto' nel linguaggio C? Qual è il loro ruolo reale, ha senso usarli nel codice moderno e quali errori possono sorgere se vengono usati in modo errato?

Supera i colloqui con l'assistente IA Hintsage

Risposta

auto e register sono modificatori di archiviazione delle variabili in C.

  • auto storicamente indica una variabile automatica con ambito di visibilità all'interno di una funzione/blocco. Per impostazione predefinita, tutte le variabili locali sono auto, quindi di solito non ha senso scriverlo esplicitamente.

  • register chiede al compilatore di memorizzare la variabile nel registro del processore per accelerare l'accesso. Ma i compilatori moderni ottimizzano autonomamente la memorizzazione, ignorando o rispondendo minimamente a questa richiesta.

Inoltre, le variabili di tipo register non possono avere un indirizzo (&var è vietato).

Esempio:

register int counter = 0; auto float sum = 0.0f;

Domanda trabocchetto

Può essere dichiarato un puntatore a una variabile register? Ad esempio:

register int x = 5; int *p = &x;

Risposta:

No, non è possibile ottenere l'indirizzo di una variabile register — questo porterà a un errore di compilazione. Il modificatore register vieta l'operazione di ottenimento dell'indirizzo della variabile.

Esempi di errori reali a causa della mancanza di conoscenza dei dettagli del tema


Storia

In un vecchio progetto, uno sviluppatore ha utilizzato register per le variabili del ciclo e poi ha tentato di passare il loro indirizzo a una funzione: foo(&i);. Il codice non si compilava, richiedendo di rimuovere il modificatore register. L'errore è stato scoperto solo durante la costruzione, prolungando il refactoring.


Storia

Il team ha tentato di utilizzare register per una variabile di grande dimensione (ad esempio, una struttura). Il compilatore ha ignorato la richiesta e ha memorizzato la variabile nella memoria, senza fornire il previsto aumento delle prestazioni, e gli sviluppatori hanno cercato a lungo la causa del rallentamento.


Storia

Nel codice è stato ampiamente usato auto per le variabili locali, ritenendolo un buon stile (facendo riferimento ad altri linguaggi). Questo ha ingombro il codice, non ha influenzato il comportamento, ha reso più difficile la lettura e ha suscitato domande tra i colleghi.