auto
é uma palavra-chave C antiga que significa "escopo local". auto a
é o mesmo que auto int a
, e como o escopo local é o padrão para uma variável declarada dentro de uma função, também é o mesmo que int a
neste exemplo.
Essa palavra-chave é, na verdade, uma sobra do predecessor de C, B, onde não havia tipos de base: tudo era int
, ponteiro para int
, matriz de int
. (*) As declarações seriam auto
ou extrn
[sic]. C herdou o "tudo é int
" como regra padrão, então você pode declarar números inteiros com
auto a;
extern b;
static c;
O ISO C se livrou disso, mas muitos compiladores ainda o aceitam como compatibilidade com versões anteriores. Se não lhe parecer familiar, você deve perceber que uma regra relacionada está em funcionamento em
unsigned d; // actually unsigned int
o que ainda é comum no código moderno.
O C ++ 11 reutilizou a palavra-chave, que poucos ou nenhum programador C ++ estava usando com o significado original, para sua inferência de tipo. Isso é mais seguro porque a int
regra "tudo é " de C já havia sido descartada no C ++ 98; a única coisa que quebra é auto T a
que ninguém estava usando de qualquer maneira. (Em algum lugar em seus trabalhos sobre a história da linguagem , Stroustrup comenta isso, mas não consigo encontrar a referência exata no momento.)
(*) O tratamento de strings em B foi interessante: você usaria matrizes int
e empacotaria vários caracteres em cada membro. B era na verdade BCPL com sintaxe diferente.
int
foi removido do padrão C em 1999.