Pokaż wyniki 1 do 8 z 8

Temat: int main

  1. #1
    Zarejestrowany
    Mar 2008
    Postów
    94

    Domyślnie int main

    Moje pytanie może i jest trywialne ale nie jestem expertem w C

    można zadeklarować f-cję:

    int main();
    {
    return 0
    }

    ale w większości programów sama instrukcja return 0 jest niepotrzebna (z tego co ja pisałem) i z powodzeniem można zrobić tak:

    void main()
    {
    }

    zatem kiedy używa się int main razem z return 0? w jakich przypadkach jest to konieczne ?

  2. #2

    Domyślnie

    Zgodznie ze standardem ANSI ISO, czy jakas tam, funkcja main() powinan zwracać wartość void. Jednak kompilatory takie jak gcc wymagają, żeby main() zwracało wartość int (kod błedu). (swoją drogą ciekawe dla czego gcc nie trzyma standardu).

    Natomiast return(0) nie jest wymagane, ponieważ system operacyjny sam domyślnie przyjmuje, ze program zwrócił wartosc 0 - brak błedu, a jeśli w programie wystąpił błąd i chcesz tę informacje przekazać do systemu, to wtedy musisz to zrobić funkcją return(kodBledu).

    aha, ten standard tyczy się c++, w c, o ile wiem, to funkcja main() zawsze zwraca int (jeśli nie, to mnie poprawcie).
    Ostatnio edytowane przez zehos : 03-28-2008 - 17:38

  3. #3
    Zarejestrowany
    Mar 2008
    Postów
    94

    Domyślnie

    ok dzięki;

    nie no to co napisałeś wydaje się logiczne; A wiesz może jaki to może być błąd ?

    bo jeśli nie ma pliku w systemie który się chce otworzyć to robi się to np: za pomocą TRY... więc jakie błedy mozna zwracać za pomocą return ?


    PS: w ANSI C możesz zrobic void main;
    Ostatnio edytowane przez SARS : 03-28-2008 - 18:04

  4. #4

    Domyślnie

    Wyjatki rzucasz tak:

    throw new ExceptionType;

    albo mozesz je tez przez referencje zwrócić, albo jeszcze globalny wyjatek i zwrócić go, tak czy siak wszystko dzięki throw, a nie return.

    Poczytaj wiecej o wyjątkach (ang. exceptions).

    http://pl.wikibooks.org/wiki/C%2B%2B...C4%85tk%C3%B3w
    http://www.intercon.pl/~sektor/cbx/a...xceptions.html

    edit:
    hmm, przeczytałem jeszcze raz twój post i nie jestem pewny czy o to ci chodziło. Uściślij...
    A
    Ostatnio edytowane przez zehos : 03-28-2008 - 18:10

  5. #5
    Zarejestrowany
    Sep 2006
    Skąd
    Warszawa
    Postów
    137

    Domyślnie re:

    z tego co ja się orientuję main zawsze zwraca return , przynajmniej tak nas uczyli na kursach , void natomiast nie musi przyjmować zwrotu return.

  6. #6
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Zgodnie ze standardem ANSI C którego trzyma się GCC funkcja main powinna zwracać wartość int. W przypadku poprawnego zakończenia się programu wartość zwracana powinna wynosić 0, w przeciwnym wypadku, odpowiedni kod błędu. W obecnych czasach niektóre systemy to po prostu ignorują, ale jest to nadal przydatne gdy programy mają się nawzajem wywoływać. Trudniej filtrować wyjście, niż sprawdzić czy zwrócona liczba to 0, prawda?
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Lekki off-topic

    Kod:
    $ make clean && make dep && make bzImage && make modules && email [email protected] -s 'kompilacja zakonczona'
    bez odpowiednich kodow bledu (wiec bez zwracania wartosci typu int) takie cos byloby niemozliwe
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8
    Zarejestrowany
    Mar 2008
    Postów
    94

    Domyślnie

    Cytat Napisał Nikow Zobacz post
    Zgodnie ze standardem ANSI C którego trzyma się GCC funkcja main powinna zwracać wartość int. W przypadku poprawnego zakończenia się programu wartość zwracana powinna wynosić 0, w przeciwnym wypadku, odpowiedni kod błędu. W obecnych czasach niektóre systemy to po prostu ignorują, ale jest to nadal przydatne gdy programy mają się nawzajem wywoływać. Trudniej filtrować wyjście, niż sprawdzić czy zwrócona liczba to 0, prawda?

    Nikow main faktycznie zwraca wartość typu int, ale tylko w przypadku deklaracji:

    main()
    {
    }

    no i w tym przypadku musi być instrukcja return 0 - żeby nie dostać ostrzeżenia;

    No ale jak zadeklarujesz main() jako wskazany typ VOID wtedy kompilacja przebiega 100% pomyślnie bez żadnych ostrzeżeń nawet gdy nie ma "return 0"; A w przypadku void main - żaden kod błedu nie jest zwracany;

    Być może TQM odpowiedział mi na pytanie; Że tej kompilacji bym nie wykonał bez jakiś kodów błedów - ale ja tak daleko jeszcze nie zaszedłem..

    w main jako parametry podaje się parametry wykonalnego exe po kompilacji czyli jak chcemy zrobić program z parametrami, żeby wywołać go w ten sposób:
    program.exe param1 param2 - to deklarujemy w main odpowiednie zmienne;

    Być może zwrot błędów ma coś wspólnego z wywoływanymi parametrami choć tak naprawdę nie wiem kiedy jest konieczność użycia int main a kiedy można zrobić void main...
    błedną ilość parametrów za programem też od razu wykrywa się w kodzie programu i return 0 jest zbedne...
    Ostatnio edytowane przez SARS : 03-31-2008 - 10:58

Podobne wątki

  1. zamiana int na char w winapi
    By 31337 in forum C/C++
    Odpowiedzi: 0
    Autor: 04-30-2007, 23:54

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj