La autoparola chiave è inutile nel linguaggio C. È lì perché prima del linguaggio C esisteva un linguaggio B in cui quella parola chiave era necessaria per dichiarare le variabili locali. (B è stato sviluppato in NB, che è diventato C).
Ecco il manuale di riferimento per B .
Come puoi vedere, il manuale è pieno di esempi in cui autoviene utilizzato. Questo è così perché non ci sono intparole chiave. È necessario un qualche tipo di parola chiave per dire "questa è una dichiarazione di una variabile", e quella parola chiave indica anche se è locale o esterna ( autocontro extrn). Se non usi l'uno o l'altro, hai un errore di sintassi. Vale a dire, x, y;non è una dichiarazione di per sé, ma lo auto x, y;è.
Poiché le basi di codice scritte in B dovevano essere portate su NB e su C man mano che il linguaggio veniva sviluppato, le versioni più recenti del linguaggio portavano un po 'di bagaglio per una migliore compatibilità all'indietro che si traduceva in meno lavoro. Nel caso di auto, i programmatori non dovevano scovare ogni occorrenza diauto e rimuoverlo.
È ovvio dal manuale che l'ormai obsoleto "int implicito" cruft in C (essere in grado di scrivere main() { ... }senza nulla intdavanti) proviene anche da B. Questa è un'altra caratteristica di compatibilità all'indietro per supportare il codice B. Le funzioni non hanno un tipo restituito specificato in B perché non esistono tipi. Tutto è una parola, come in molti linguaggi assembly.
Nota come una funzione può solo essere dichiarata extrn putchare quindi l'unica cosa che lo rende una funzione che di identificatore l'uso : è usato in un'espressione di una funzione chiamata del genere putchar(x), ed è quello che dice al compilatore di trattare quella parola senza tipo come un puntatore a funzione.
autopuò essere specificato ma non avverrà di default?