Le auto
mot-clé est inutile dans le langage C. Il est là parce qu'avant le langage C il existait un langage B dans lequel ce mot-clé était nécessaire pour déclarer des variables locales. (B a été développé en NB, qui est devenu C).
Voici le manuel de référence B .
Comme vous pouvez le voir, le manuel regorge d'exemples dans lesquels il auto
est utilisé. Il en est ainsi car il n'y a pas de int
mot-clé. Une sorte de mot-clé est nécessaire pour dire "ceci est une déclaration d'une variable", et ce mot-clé indique également s'il s'agit d'un mot-clé local ou externe ( auto
versus extrn
). Si vous n'utilisez pas l'un ou l'autre, vous avez une erreur de syntaxe. C'est-à-dire, ce x, y;
n'est pas une déclaration en soi, mais auto x, y;
c'est.
Étant donné que les bases de code écrites en B devaient être portées vers NB et vers C au fur et à mesure que le langage était développé, les versions plus récentes du langage emportaient des bagages pour une compatibilité ascendante améliorée qui se traduisait par moins de travail. Dans le cas de auto
, les programmeurs n'avaient pas à rechercher chaque occurrence de auto
et à la supprimer.
Il est évident d'après le manuel que le cruft maintenant obsolescent "implicit int" en C (pouvoir écrire main() { ... }
sans aucun int
devant) vient aussi de B. C'est une autre fonctionnalité de compatibilité descendante pour supporter le code B. Les fonctions n'ont pas de type de retour spécifié dans B car il n'y a aucun type. Tout est un mot, comme dans de nombreux langages d'assemblage.
Notez comment une fonction peut simplement être déclarée extrn putchar
et ensuite la seule chose qui en fait une fonction que cet identifiant utilise : elle est utilisée dans une expression d'appel de fonction comme putchar(x)
, et c'est ce qui indique au compilateur de traiter ce mot sans type comme un pointeur de fonction.
auto
peut être spécifiée mais ne se produira pas par défaut?