Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 2.949 pregleda

Najnovija ↓

zasto main bez return nema warninga? 30.12.2007. u 18:09 · pre 229 meseci #1
Ispricavam se ako ovo zvuci previse lame, ali cini mi se da sam u ranijim vezijama Borlandovog i VS kompajlera dobivao poruku ako main() funkcija nema povratnu vrijednost 'return 0'. Medjutim ovakav kod u VS 2005 mi ne daje nikakva upozorenja (warninge)

Code:
#include <iostream> 
using namespace std; 
int main()
{

}


Ocigledno se radi o nekom novom pravilu o neprijavljivanju ovoga propusta, samo ne znam zbog cega je to uradjeno.

Takodjer, kakve uopce probleme mozemo ocekivati ako ne stavimo u main 'return 0'? Main ce ionako zavrsiti sa zatvarajucom viticastom zagradom.
Potpis
...
Re: zasto main bez return nema warninga? 30.12.2007. u 19:24 · pre 229 meseci #2
A return statement in main() has the effect of leaving the main function (destroying any objects with
automatic storage duration) and calling exit() with the return value as the argument. If control reaches
the end of main without encountering a return statement, the effect is that of executing
return 0;
Potpis
I ♥ ♀

Ovaj post je zlata vrijedan!
Re: zasto main bez return nema warninga? 30.12.2007. u 20:33 · pre 229 meseci #4
Da, program bi radio u oba slucaja, ali mislim da je ovdje rijec o nacinu pridrzavanja standarda pojedinog kompajlera... Nisam siguran, ali mislim da je bilo, ili jos uvijek jeste, da main funkcije vracaju povratnu vrijednost, kao i da povratna vrijednost main-a mora biti int. Nedavno je bila jedna diskusija da li copy constructor treba primati Objekat(const Objekat&) ili samo Objekat(Objekat& ), jer gcc pri tome izbacuje error, dok VS, bcc i ostali kompajliraju bez problema. Ispostavilo se da je const & propisano po standardu, te se gcc toga pridrzava, dok ostali ne. Mislim da je i ovdje slican slucaj...
Re: zasto main bez return nema warninga? 30.12.2007. u 21:02 · pre 229 meseci #5
^Ne, ispostavilo se da jedino GCC baš traži const, a po standardu može a i ne mora const. Stoga, MSVC i BCC su više po standardu od GCC-a u ovom slučaju jer kompajliraju i jedan i drugi slučaj, dok kod GCC-a moraš da se odlučiš...
Potpis
I ♥ ♀

Ovaj post je zlata vrijedan!
Re: zasto main bez return nema warninga? 30.12.2007. u 21:06 · pre 229 meseci #6
Da, upravu si, ali nemam kopije standarda, dok ne nabavim ne zelim se upustati u diskusiju koji se kompajler vise pridrzava istog;) Pozdrav
Re: zasto main bez return nema warninga? 30.12.2007. u 23:25 · pre 229 meseci #7
Citat:
Sephiroth?: Da, program bi radio u oba slucaja, ali mislim da je ovdje rijec o nacinu pridrzavanja standarda pojedinog kompajlera... Nisam siguran, ali mislim da je bilo, ili jos uvijek jeste, da main funkcije vracaju povratnu vrijednost, kao i da povratna vrijednost main-a mora biti int. Nedavno je bila jedna diskusija da li copy constructor treba primati Objekat(const Objekat&) ili samo Objekat(Objekat& ), jer gcc pri tome izbacuje error, dok VS, bcc i ostali kompajliraju bez problema. Ispostavilo se da je const & propisano po standardu, te se gcc toga pridrzava, dok ostali ne. Mislim da je i ovdje slican slucaj...


Tocno, C++ standad propisuje da main() funkcija ne moze biti void main() kao sto treba kod Jave ili C#, nego mora biti int main(). Mislim da Devcpp cak to prijavljuje kao gresku (ili mozda Borland, nisam siguran), ali VS 2005 ovo ne samo da ne prijavljuje nego mi se cini da i ne trazi ono return 0.

A ne vidim cemu prevelika diskusija oko const Klasa& objektOriginal. Konstruktor kopije ne mijenja originalni objekt, zato i nije tako cudno da bi se trebalo zahtijevati da parametar bude const objekt.

Potpis
...
Re: zasto main bez return nema warninga? 31.12.2007. u 11:17 · pre 229 meseci #8
Citat:
icobh: A return statement in main() has the effect of leaving the main function (destroying any objects with
automatic storage duration) and calling exit() with the return value as the argument. If control reaches
the end of main without encountering a return statement, the effect is that of executing
return 0;

Na ovo bih samo dodao 3.6.1-5.
Potpis
AKA DDMM
Re: zasto main bez return nema warninga? 31.12.2007. u 11:33 · pre 229 meseci #9
GCC 3.4.6 ne zahteva da konstruktor kopije bude const i dozvoljava da se prosleđeni parametar promeni:
Code:

#include <iostream>
#include <string>


using namespace std;


class My
{
private:

    string _s;

public:

    My() : _s()
    {
    }
    
    
    ~My()
    {
    }
    
    
    My(string s) : _s(s)
    {
    }
    
    
    My(My& o) : _s(o._s)
    {
        o._s = "world";
    }
    
    
    void print()
    {
        cout << _s << endl;
    }
};


int main()
{
    My a("hello");
    My b(a);
    b.print();
    a.print();
    
    return 0;
}
Potpis
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme