[ virtualVoid @ 30.12.2007. 17:09 ] @
| 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. |
[ icobh @ 30.12.2007. 18:24 ] @
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;
[ virtualVoid @ 30.12.2007. 18:36 ] @
Fino, znaci bio sam u pravu za zagrade, a valjda zbog istoga se ne javlja ni warning

[ Sephiroth? @ 30.12.2007. 19:33 ] @
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...
[ icobh @ 30.12.2007. 20:02 ] @
^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š...
[ Sephiroth? @ 30.12.2007. 20:06 ] @
Da, upravu si, ali nemam kopije standarda, dok ne nabavim ne zelim se upustati u diskusiju koji se kompajler vise pridrzava istog;) Pozdrav
[ virtualVoid @ 30.12.2007. 22:25 ] @
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.
[ 1jedini @ 31.12.2007. 10:17 ] @
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.
[ karas @ 31.12.2007. 10:33 ] @
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;
}
[ icobh @ 31.12.2007. 10:49 ] @
Mislim da je od ovih korištenijih kompajlera najproblematičniji GCC u verziji 3.4.2.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.