Przez chwilę byłem bardzo dumny z tego, że napisałem swój pierwszy prawdopodobnie program bez błędów. Oto cały kod źródłowy:Najkrótszy program w języku C nadal wywołuje usterkę.
int main;
To kompiluje doskonale nawet bez int
, ale jest ostrzeżenie (nawet bez -Wall
) i, jako programista, który ma na celu programu wolna od błędów, traktuję jako błędy.
Po pomyślnym skompilowaniu tej aplikacji natychmiast rzuciłem się, aby ją uruchomić. Ku mojemu zaskoczeniu pojawił się błąd błędu segmentacji ...
Poważnie. Co się dokładnie dzieje?
Moje przypuszczenie jest następujące: to brak definicji main
. Jest to tak oczywiste, a mimo to pozwala na to kompilator. OK, main
można zdefiniować w innej jednostce. Ale nawet linker nic z tym nie robi. Jakiś konkretny powód, dlaczego?
Myślę, że problemem jest to, że wystarczy zdefiniować prototyp, ale nie samą funkcję, ale czekać: wystarczy zdefiniować zmienną i żadnych funkcji. Jak dotąd punkt wejścia nie jest zdefiniowany. – rekire
To [wyjaśnienie na Reddit] (http://www.reddit.com/r/programming/comments/19xyw1/some_dark_corners_of_c_presentation/c8swcpi?context=2) może pomóc. – DCoder
To zależy od tego, jak i gdzie skompilujesz swój program. Hostowane programy środowiskowe wymagają "głównego", ale programy środowiskowe typu "wolnostojące" nie. –