Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - Jak powinna wyglądać deklaracja funkcji main?

adrian.lodz 09 Lis 2014 16:07 753 6
  • #1 09 Lis 2014 16:07
    adrian.lodz
    Poziom 9  

    Witam.
    Tak się zastanawiam, jak tak naprawdę powinno się deklarować funkcję główną main w c++? Jeżeli int main(){} to zawsze ona zwraca return 0, jeśli kod jest poprawny. Ale można też jako void main(){}, lub można też bez typu czyli po prostu main(){}.
    Jaka jest między nimi różnica? Po co aż trzy różne sposoby?
    W projekcie może być tylko jedna funkcja main przecież, więc nie można połączyć dwóch programów, gdzie jedna funkcja main robi coś, dostając informacje czy wykonała się poprawnie funkcja int main.
    Zastanawiało mnie to przez długi czas, bo tego nie pojmuję. Po co ktoś wymyślił trzy sposoby deklaracji funkcji głównej, zamiast jednej?

    0 6
  • #3 09 Lis 2014 16:39
    Dżyszla
    Poziom 42  

    W zasadzie dużo zależy tu od kompilatora. Nie każdy dopuści każdą konstrukcję, a mogą się zdarzać też różnice w samym nagłówku funkcji (pamietaj o możliwości odebrania parametrów wiersza polecenia). Często formy skrócone to po prostu wygoda i nic ponadto.

    0
  • #4 09 Lis 2014 17:01
    michcior
    Poziom 30  

    W normalnych systemach, wartość zwracana przez main jest tzw rezultatem wykonania programu i może być brana pod uwagę. Np, w przypadku wykonywania szeregu programów zależnie od tego czy poprzedni się wykonał poprawnie. Wartość różna od 0 zwykle uważana jest za błąd. Porządny programista powinien zawsze zwracać wartość w main.
    O tu zgrabnie to podsumowano:
    http://en.wikipedia.org/wiki/Exit_status

    0
  • #5 09 Lis 2014 17:15
    vonar
    Poziom 28  

    Zajrzyj do sekcji [basic.start.main] wersji roboczej standardu C++.

    0
  • #6 09 Lis 2014 17:44
    mcvsama
    Poziom 15  

    W ISO C++ może być tylko "int main(/* argumenty, jeśli chcesz */)". Nie może być void, nie może być też bez typu. Kompilator może takie przyjąć, ale nie musi. Zapewne co najmniej dostaniesz jakieś ostrzeżenie od kompilatora. Jeśli chcesz mieć pewność, że program Ci się skompiluje wszędzie, pisz "int main(/* argumenty, jeśli chcesz */)".

    W C chyba może być i "void main()" i "int main()". A wersja bez typu oznacza to samo co z "int". Dotyczy to każdej funkcji w C (w C++ przez kompatybilność też), że możesz pominąć typ i będzie to oznaczać, że funkcja zwraca int. Ale to stara i zła praktyka… i tyle.

    Acha, jeśli Twój program zakończył się niepowodzeniem, to zwracasz EXIT_FAILURE, jeśli sukcesem - EXIT_SUCCESS (z <cstddef>). Chyba praktycznie w każdym systemie EXIT_SUCCESS jest 0, więc sobie ludzie skracają.

    0
  • #7 08 Gru 2014 11:56
    adrian.lodz
    Poziom 9  

    Dobra. Wielkie dzięki.

    0