Pues podría .
Por ejemplo, en el dialecto de C utilizado en el sistema operativo del Plan 9main
normalmente se declara como una void
función, pero el estado de salida se devuelve al entorno de llamada al pasar un puntero de cadena a la exits()
función. La cadena vacía denota éxito, y cualquier cadena no vacía denota algún tipo de falla. Esto podría haberse implementado al main
devolver un char*
resultado.
Y sin duda sería posible implementar un sistema con una float
o double
estado de salida.
¿Entonces por qué int
? Es solo una cuestión de convención, y hay un gran valor para que los sistemas operativos y los programas que se ejecutan bajo ellos obedezcan una convención común.
La convención de Unix es usar un código de estado entero, con 0 que denota éxito y falla que no denota cero (porque típicamente solo hay una forma de tener éxito, pero múltiples formas de fallar). No sé si esa convención se originó con Unix; Sospecho que vino de sistemas operativos anteriores.
La coma flotante sería una convención más difícil, porque (a) el soporte de coma flotante no es universal, (b) es más difícil definir un mapeo entre los valores de coma flotante y las condiciones de error, (c) diferentes sistemas usan diferentes flotantes. representaciones de puntos, y (d) simplemente imagine la diversión de localizar un error de redondeo en el estado de salida de su programa. Los enteros, por otro lado, se prestan muy bien para enumerar códigos de error.
El Plan 9, como mencioné, usa cadenas, pero eso impone cierta complejidad para la administración de la memoria, la codificación de caracteres, etc. Era, hasta donde yo sé, una idea nueva cuando el Plan 9 lo implementó, y no reemplazó el existente. Convención generalizada.
(Por cierto, en C ++ solomain
puede regresar , y en C está permitido solo si el compilador lo admite específicamente. Muchos compiladores no se quejan muy alto si escribe , pero es solo una ligera exageración decir que está mal ).int
void main
void main