auto
est un ancien mot-clé C qui signifie "portée locale". auto a
est 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 a
dans 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 auto
ou 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 int
rè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 int
et regrouperiez plusieurs caractères dans chaque membre. B était en fait BCPL avec une syntaxe différente.
int
a été supprimé de la norme C en 1999.