Odpowiedzi, ponieważ wszystkie istniejące odpowiedzi mówią, że jest to niezdefiniowane zachowanie, co nie jest prawdą, więc nie mam nic C uprowadzenie.
w C89 (dzięki PMG w odniesieniu do draft standard) 5.1.2.2.3:
Powrót z pierwszego połączenia do głównych funkcji jest równoważne wywołaniu funkcji wyjścia z wartość zwrócona przez funkcję główną jako jej argument. Jeśli zostanie osiągnięte} , które kończy działanie głównej funkcji, stan zakończenia powracający do środowiska hosta to nieokreślony.
W C99, cytując za pomocą n1256, 5.1.2.2.3:
Jeśli zwracany typ głównego funkcji jest typ zgodny z int, powrót z początkowego wywołania główną funkcją jest równoważna wywołując funkcję wyjścia z wartością zwróconej przez główna funkcja jako jego argument; docierając do}, że kończy się, funkcja główna zwraca wartość 0. Jeśli typ powrotu nie jest kompatybilny z int, stan zakończenia zwrócono do środowiska hosta środowisko nie jest określone.
Tak, to nie jest „niezdefiniowane zachowanie”: zachowuje się jak gdyby main
zwrotów funkcyjnych, ale w C89 zwrócona wartość nie jest określona przez standard. W przypadku twojego przykładowego programu, na twojej implementacji, zwracana wartość wydaje się konsekwentnie wynosić 12, prawdopodobnie z powodu, dla którego mówi Ben Voigt. Skoro jesteś na Linuksie, prawdopodobnie nie jest to duża zmiana, aby skompilować twój kod jako C99 (lub zresztą skompilować go przy użyciu prawie zgodnego z GCC trybu C99).
dowolną funkcję, która zwraca wartość, inne niż main
to jest niezdefiniowane zachowanie chyba rozmówca nie wykorzystuje wartość powrotną (n1256, 6.9.1/12):
Jeśli}, który kończy działanie, osiąga wartość , a wywołanie funkcji wywołuje funkcję , zachowanie jest niezdefiniowane.
Nie jestem pewien, czy początkowe połączenie z numerem main
należy wymienić jako wyłączone z tej ogólnej zasady. Nie musi to być: z POV standardu, że wywołanie nie ma wywołującego, więc myślę, że wartość wywołania funkcji nie jest "używana przez wywołującego", mimo że staje się stanem zakończenia dla programu.
+1 dobre pytanie. :) – Pavitar
http://stackoverflow.com/questions/204476/what-should-main-return-in-and-c –