Eh bien, ça pourrait .
Par exemple, dans le dialecte de C utilisé dans le système d’exploitation Plan 9 , il main
est normalement déclaré en tant que void
fonction, mais l’état de sortie est renvoyé à l’environnement appelant en transmettant un pointeur de chaîne à la exits()
fonction. La chaîne vide indique un succès et toute chaîne non vide indique un type d'échec. Cela aurait pu être implémenté en main
renvoyant un char*
résultat.
Et il serait certainement possible de mettre en place un système avec un statut float
ou un double
statut de sortie.
Alors pourquoi int
? C'est juste une question de convention - et il est extrêmement précieux de faire en sorte que les systèmes d'exploitation et les programmes qui y sont exécutés obéissent à une convention commune.
La convention Unix consiste à utiliser un code d’état entier, 0 indiquant la réussite et non nul indiquant l’échec (car il n’ya généralement qu’une seule façon de réussir, mais plusieurs façons d’échouer). Je ne sais pas si cette convention a son origine avec Unix; Je soupçonne que cela provient de systèmes d'exploitation antérieurs.
La convention en virgule flottante serait une convention plus difficile, car (a) la prise en charge de la virgule flottante n’est pas universelle, (b) il est plus difficile de définir un mappage entre les valeurs en virgule flottante et les conditions d’erreur, (c) différents systèmes utilisent différentes méthodes de calcul. (d) imaginez simplement le plaisir de détecter une erreur d’arrondi dans le statut de sortie de votre programme. Les entiers, par contre, se prêtent très bien à l'énumération des codes d'erreur.
Plan 9, comme je l'ai mentionné, utilise des chaînes, mais cela impose une certaine complexité pour la gestion de la mémoire, l'encodage des caractères, etc. Il s'agissait, pour autant que je sache, d'une nouvelle idée lorsque Plan 9 l'a mise en œuvre, et cela ne remplace pas l'existant. convention répandue.
(Incidemment, le C ++ main
ne peut que revenir int
, et le C void main
n'est autorisé que si le compilateur le supporte spécifiquement. De nombreux compilateurs ne se plaignent pas très fort si vous écrivez void main
, mais ce n'est qu'une légère exagération de dire que c'est faux .)