autoest un ancien mot-clé C qui signifie "portée locale". auto aest identique à auto int a, et comme la portée locale est la valeur par défaut pour une variable déclarée à l'intérieur d'une fonction, elle est également la même que int adans cet exemple.
Ce mot-clé est en fait un reste du prédécesseur B de C, où il n'y avait pas de types de base: tout était int, pointeur vers int, tableau de int. (*) Les déclarations seraient soit autoou extrn[sic]. C a hérité du "tout est int" comme règle par défaut, vous pouvez donc déclarer des entiers avec
auto a;
extern b;
static c;
ISO C s'est débarrassé de cela, mais de nombreux compilateurs l'acceptent toujours pour la compatibilité descendante. Si cela ne vous semble pas familier, vous devez vous rendre compte qu'une règle connexe est à l'œuvre dans
unsigned d; // actually unsigned int
ce qui est encore courant dans le code moderne.
C ++ 11 a réutilisé le mot-clé, que peu ou pas de programmeurs C ++ utilisaient avec la signification d'origine, pour son inférence de type. Ceci est généralement sûr car la intrègle «tout est » de C avait déjà été supprimée dans C ++ 98; la seule chose qui casse auto T a, c'est que personne n'utilisait de toute façon. (Quelque part dans ses articles sur l'histoire de la langue , Stroustrup commente cela, mais je ne trouve pas la référence exacte pour le moment.)
(*) La gestion des chaînes en B était intéressante: vous utiliseriez des tableaux intet regrouperiez plusieurs caractères dans chaque membre. B était en fait BCPL avec une syntaxe différente.
inta été supprimé de la norme C en 1999.