Citat:
ivbrcic:
Medu prvim stvarima na predavanjima iz c++ je bilo da se sto prije rijesimo printfa i scanfa, i to je stvar na kojima bi gubio puno bodova na ispitu i to ne iz nekog hira profesora, vec zato sto je tako ispravno.
Nema ispravno i neispravno. Prije ili poslije ces se iz C++-a morat linkat na neki C library u kojem neka funkcija u svom argumentu ocekuje FILE*. Onda hoces-neces moras koristiti C-ov stdio, pa fopen, printf, scanf i ekipu.. a posto je bezveze u istom programu mijesati dvije vrste I/O.. po inerciji ces napravit fallback na Cov stdio :)
Jos jedan razlog zasto mi se C++ streamovi ne svidjaju je to sto ne mozes znati sto je poslo po krivu. Mozes ti rec fstream i("nekifajl.txt"), ali recimo da to ne uspije. I ti nemas pojma zasto (a ima hrpa mogucih razloga - nema memorije, fajl ne postoji, nemas dozvole za pristupiti fajlu, dio patha nije direktorij... itd). U C-u razlog greske mozes procitati u errno globalnoj varijabli (i pokusati nesto drugo napraviti, javiti smislenu gresku korisniku itd..), a u C++-u se mozes slikat.
Citat:
Ako krenemo od pretpostavke da je c++ nastao poslije c-a i to na nacin da su zadrzane sve stvari koje su dobre u c-u, a one koje nisu toliko dobre su poboljsanje, pritom direktno mislim i na printf i scanf.
printf() i scanf() su funkcije koje odlicno sluze svojoj svrsi.
Jedan od razloga zasto se islo u dizajn C++ streamova je to sto se u compile-timeu ne mogu provjeriti da li se argumenti printfa i scanfa slazu sa formatom. Po meni je to bezveze razlog jer i C i C++ neukom programeru ionako nude bezbroj nacina da se upuca u nogu.
Drugi razlog je sto printf i scanf ne mozes prosirivati novim formatima. A ljudi su htjeli zapisivati objekte u fajlove (npr. ne mozes napisati fprintf(f, "%o", pointer_na_moj_objekt), a nekoga je bolilo kad je morao pisati fwrite() za svoje structove, a fprintf() za tekstualne podatke. Pa kad su vec overloadani operatori.. eto neka budu streamovi i << i >> za sve.
Kad sam vec kod ovoga - u C++-u je jako tesko mijesati binarne i tekstualne podatke u jednom fajlu. Jos ide kod pisanja, ali kod citanja...
E sad C++ streamovi su JAKO daleko od onoga sto bi bilo stvarno korisno, a to je serijalizacija objekata koju moras sam pisati i namuciti se ko pas da to napravis ispravno (ili uzet gotov library.. i vidjet kolko je to zapravo komplicirano).
Ukratko, ne vidim opravdanje za postojanje tog dijela C++ libraryja: kompliciraniji je i nudi manje mogucnosti za detekciju runtime gresaka.
Mozda nesto dobijes tek kad ides pisati svoje streambuf klase pa npr. imas on-the-fly kompresiju na streamu (ja napisao tako nesto).. ali imas C libraryja (npr. sfio) u kojima isto to mozes napraviti na puno jednostavniji nacin...
IMHO, C++ streams su jedan veliki promasaj.