Ну, это может .
Например, на диалекте C, используемом в операционной системе Plan 9main
, обычно объявляется как void
функция, но состояние выхода возвращается в вызывающую среду путем передачи строкового указателя на exits()
функцию. Пустая строка обозначает успех, а любая непустая строка обозначает какой-то сбой. Это может быть реализовано при наличии main
возвращать char*
результат.
И, конечно, было бы возможно реализовать систему со статусом float
или double
выход.
Так почему же int
? Это просто вопрос соглашения - и есть огромная ценность в том, чтобы операционные системы и программы, работающие под ними, подчинялись общему соглашению.
Соглашение Unix состоит в том, чтобы использовать целочисленный код состояния, где 0 означает успех, а ненулевое - отказ (потому что обычно есть только один способ добиться успеха, но несколько способов потерпеть неудачу). Я не знаю, возникла ли эта конвенция с Unix; Я подозреваю, что это произошло от более ранних операционных систем.
Соглашение с плавающей точкой будет более сложным соглашением, поскольку (а) поддержка с плавающей точкой не является универсальной, (б) сложнее определить отображение между значениями с плавающей точкой и условиями ошибки, (в) разные системы используют разные плавающие представление точек и (d) просто представьте себе удовольствие от отслеживания ошибки округления в состоянии выхода вашей программы. Целые числа, с другой стороны, очень хорошо подходят для перечисления кодов ошибок.
В Plan 9, как я уже упоминал, используются строки, но это усложняет управление памятью, кодировку символов и т. Д. Насколько мне известно, идея, появившаяся в Plan 9, была новой, и она не заменила существующую. широко распространенная конвенция.
(Между прочим, в C ++ main
можно только возвращать int
, а в C void main
это разрешено только в том случае, если компилятор специально его поддерживает. Многие компиляторы не очень громко жалуются, если вы пишете void main
, но это лишь небольшое преувеличение, чтобы сказать, что это неправильно .)