Mam kilka programów C bez wyraźnego zwrotu z głównym, tak:domyślna wartość GCC główny powrót nie jest zero
int main(int argc, char *argv[])
{
// blah blah
}
Gdybym je skompilować z GCC 4.6.3 oraz następujące opcje:
gcc file.c -Wall -Wextra
programów nie zwraca 0 i dać mi problemów, ale średnia (i wiele innych odpowiedzi na SO) mówi:
Jeśli typ zwracany głównej funkcji jest typem zgodnym z int, zwrot z początkowego wywołania do funkcji głównej jest równoważny wywołaniu funkcji wyjścia z wartością zwracaną przez funkcję główną jako jej argumentem; [10] osiąga wartość} kończącą główna funkcja zwraca wartość 0. Jeśli typ zwracany nie jest zgodny z int, stan zakończenia zwracany do środowiska hosta jest nieokreślony.
[10] Zgodnie z 6.2.4, okresy życia obiektów z automatycznym czasem przechowywania zadeklarowane w głównej części zostaną zakończone w pierwszym przypadku, nawet jeśli nie będą miały miejsca w drugim.
Moje programy zwracają różne wartości, 160, 15, 14 ... śmieci?
Czy brakuje mi czegoś? Czy to jest błąd GCC? Nie można znaleźć niczego w internetowym dokumencie GCC. Czy GCC wciąż odnosi się do jakiegoś starego standardu C (pre-C99), gdzie nie można tego określić?
skompiluj go za pomocą '-std = c99'. –
Spróbuję, dzięki. – effeffe
@ BlueMoon: Jeszcze lepiej, dodaj 'return 0;' na końcu 'main'. Jest nieszkodliwy w trybie C99. –