2010-05-23 3 views
12

La funzione main() in un programma C può restituire un tipo di dati double?La funzione main() può restituire double?

Se , come e perché?

Se No, perché?

+4

Devo chiedere, perché il downvote? Questa era una domanda perfettamente legittima. +1. – Warty

+0

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

+0

vedere anche - https://softwareengineering.stackexchange.com/questions/203104/why-cant-main-return -a-double-or-string-piuttosto-than-int-or-void – roottraveller

risposta

6

Sì. In base allo standard C, main() deve restituire un valore int. Ma non deve.

See here.

+0

Forse è più di una cosa convenzionale. Sarebbe confuso se un'applicazione potesse restituire un carattere [], int [], ecc ... – Warty

+1

@ItzWarty: * non * può restituire un carattere [] o int [] o qualcosa di diverso da un tipo di dati primitivo. Nella memoria di chi sarebbe stato memorizzato? Quelli sono puntatori e indicano * da qualche parte *. Se il programma è stato distrutto, dove verrà memorizzato questo array? –

+0

@Comp, sarebbe perfettamente fattibile per un sistema operativo per consentire di copiare un carattere [] restituito dal processo principale al processo padre. Questo non è diverso nel passare il codice restituito int al genitore (requisiti di archiviazione diversi ma esattamente lo stesso metodo). – paxdiablo

0

Non so cosa significherebbe se main restituito doppio. Comunque qui è quello che accade 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

Cos'è $? dopodichè? –

+0

@Precision: note –

+0

@Snake Plissken: Molto interessante. Mi chiedo perché sia ​​così. –

0

La funzione denominata principale che funge da punto di ingresso di un programma in un'implementazione ospitata di C deve restituire un int. È possibile scrivere una funzione denominata "principale" che restituisce un doppio. Per farlo, lo fai statico, e poi ti compri un giubbotto antiproiettile e probabilmente assumi alcune guardie armate; se qualcuno deve mantenere una simile mostruosità, ne avrai bisogno.

3

Da C99

5.1.2.2.3 terminazione Programma Se il tipo di ritorno della funzione principale è un tipo compatibile con int, un ritorno dalla chiamata iniziale alla funzione principale è equivalente per chiamare la funzione uscita con il valore restituito dalla funzione principale come la sua argomento; 10) di raggiungere il} che termina la funzione principale restituisce un valore 0. Se il tipo di ritorno non è compatibile con wi esimo int, lo stato di terminazione restituita all'ambiente ospite non è specificato

Riferimento qui - 5.1.2.2.3 terminazione Programma http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

0

Se ci si trova in un ambiente ospitato (vale a dire, di solito su un PC) il tipo di valore di ritorno è fisso come già detto. È possibile restituire un tipo di valore diverso se si esegue in un ambiente indipendente. Un ambiente indipendente di solito si verifica quando si programma per i microcontrollori, poiché non vi è alcun sistema operativo in giro (si crea un grande binario che viene eseguito direttamente sull'hardware). Tuttavia, in questo caso il solito prototipo per main sarebbe void main(void).

Ma che senso ha restituire un tipo diverso come double? A meno che il chiamante (cioè il sistema operativo) possa fare qualcosa con il valore di ritorno, è inutile, e poiché non c'è modo per il chiamante di conoscere il tipo del valore di ritorno che deve essere corretto.

1

C dice che è perfettamente a posto. POSIX, d'altra parte, vuole un numero intero compreso tra 0 e 255.Generalmente, main() deve restituire un valore di EXIT_SUCCESS o EXIT_FAILURE a meno che non si specifichi specificamente uno stato che non è né ma che è compreso tra 0 e 255 per rendere lo stato significativo.

Ad esempio, la restituzione di 114 potrebbe indicare allo script di init di chiamata alcune condizioni che potrebbero essere corrette dallo script.

Se, in un sistema operativo POSIX si tenta di restituire 3.14 da main(), il processo di chiamata vedrà quasi sempre 255.

Non sono sicuro di altri sistemi operativi, ma in generale - ciò che C ti consente di farla franca non è sempre gradevole a ciò che il sistema operativo stesso ti consente di farla franca :) Questo non è affatto specifico di POSIX .

Problemi correlati