2010-05-23 26 views
12

¿Puede la función main() en un programa C devolver un tipo de datos double?¿Puede la función main() devolver doble?

Si , ¿cómo y por qué?

Si No, ¿por qué?

+4

Debo preguntar, ¿por qué el voto a favor? Esta fue una pregunta perfectamente legítima. +1. – Warty

+0

Dupe http://stackoverflow.com/questions/204476/what-should-main-return-in-cc –

+0

vea también - https://softwareengineering.stackexchange.com/questions/203104/why-cant-main-return -a-double-or-string-rather-than-int-or-void – roottraveller

Respuesta

6

Sí. De acuerdo con el estándar C, main() debe devolver un valor int. Pero no debe.

See here.

+0

Quizás sea algo más convencional. Sería confuso si una aplicación pudiera devolver un char [], int [], etc ... – Warty

+1

@ItzWarty: * No puede * devolver un char [] o int [] ni nada que no sea un tipo de datos primitivo. ¿En qué memoria estaría almacenado? Esos son punteros, y señalan * en algún lugar *. Si el programa ha sido destruido, ¿dónde se almacenaría este conjunto? –

+0

@Comp, sería perfectamente factible que un sistema operativo le permita copiar un carácter [] devuelto del proceso principal al primario. Esto no es diferente al pasar el código de retorno int al padre (diferentes requisitos de almacenamiento pero exactamente el mismo método). – paxdiablo

0

No sé lo que significaría si main devolviera el doble. De todas formas esto es lo que sucede con gcc:

double main() 
{ 
    return 0.0; 
} 
 
$ cc double.c 
double.c: In function 'main': 
double.c:2: warning: return type of 'main' is not 'int' 
$ ./a.out 
$ echo $? 
255 
$ 
+0

¿Qué es $? ¿después de este? –

+0

@Precision: señaló –

+0

@Snake Plissken: Muy interesante. Me pregunto por qué es esto. –

0

La función llamada main que actúa como punto de entrada de un programa en una aplicación alojada de C debe devolver un int. Es posible escribir una función llamada 'main' que devuelve un doble. Para hacerlo, lo haces estático, y luego te compras un chaleco antibalas y probablemente contrates a algunos guardias armados; si alguien tiene que mantener tal monstruosidad, los necesitarás.

3

Desde C99

5.1.2.2.3 terminación Programa Si el tipo de retorno de la función principal es un tipo compatible con int, un retorno de la llamada inicial a la función principal es equivalente a llamar a la función de salida con el valor devuelto por la función principal como su argumento ; 10) de llegar a la } que termina la función principal devuelve un valor de 0. Si el tipo de retorno no es compatible con Wi º int, el estado de terminación regresó al entorno de acogida no se especifica

referencia aquí - 5.1.2.2.3 Programa de terminación http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

0

Si se encuentra en un entorno alojado (es decir, por lo general en una PC), el tipo de valor devuelto es fijo como ya se dijo. Puede devolver un tipo de valor diferente si se ejecuta en un entorno independiente. Un entorno independiente suele ser el caso cuando se programan microcontroladores, ya que no existe un sistema operativo (se crea un binario grande que se ejecuta directamente en el hardware). Sin embargo, en este caso, el prototipo habitual para main sería void main(void).

¿Pero cuál es el punto en devolver un tipo diferente como double? A menos que la persona que llama (es decir, el sistema operativo) pueda hacer algo con el valor de retorno no tiene sentido, y como no hay manera de que la persona que llama sabe sobre el tipo de valor de retorno, tiene que ser reparado.

1

C dice que está perfectamente bien. POSIX, por otro lado, quiere un número entero entre 0 y 255.En general, main() debe devolver un valor de EXIT_SUCCESS o EXIT_FAILURE a menos que se establezca específicamente un estado que no sea ni siquiera entre 0 - 255 para que el estado sea significativo.

Por ejemplo, al devolver 114 podría decirle al guion de inicio de llamada sobre alguna condición que podría ser corregida por el guion.

Si, en un sistema operativo POSIX, intenta devolver 3.14 desde main(), el proceso de llamada casi siempre verá 255.

No estoy seguro acerca de otros sistemas operativos, pero en general, lo que C le permitirá salirse con la suya no siempre es conforme a lo que el sistema operativo le permitirá salirse con la suya :) Eso no es para nada específico de POSIX .

Cuestiones relacionadas