Novo

Forum kao aplikacija na telefonu

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

  • 25 odgovora
  • 11.888 pregleda

Najnovija ↓

Re: Najbolji kompajler 09.12.2007. u 22:20 · pre 230 meseci #21
Reako sam vec da razmislis o ANSII-ju.. Usput, najbolja literatura iz ove oblasti "C++ izvornik", mozes i tu pogledati. To je samo jos jedan plus za GCC. Dakle, mora se pisati "kako je Bog rekao" ( a ne Bill Gates, ili sta ti ja znam ko, dobar je onaj fazon; Koliko je potrebno Microsoftovih(mogu se i uzeti i jos neke velike firme) inzenjera da zamene sijalicu? Nijedan, proglasice mrak za standard!;) ). :) Suludo je napisati nesto, i onda juriti compiler koji ce to da prevede. Mozes li ovaj "novi" code kompajlirati bcc-om? (bas me zanima)
Potpis
Ne treba ciljati u metu vec metati u cilj
Re: Najbolji kompajler 09.12.2007. u 22:56 · pre 230 meseci #22
Kompajlira i ovaj sa const. Ali ja imam osjećaj da gcc ništa nema po default-u. Zar se mora ispred imena f-je pisati int, ako f-ja vraća cjelobrojnu vrijednost. Int je valjda podrazumijevano...
Potpis
I ♥ ♀

Ovaj post je zlata vrijedan!
Re: Najbolji kompajler 09.12.2007. u 23:14 · pre 230 meseci #23
Definitivno mora stajati int ispred.. Nisam ni znao da je to default... Hmmm
Potpis
Ne treba ciljati u metu vec metati u cilj
Re: Najbolji kompajler 10.12.2007. u 09:31 · pre 230 meseci #24
kOLEGE FORUMASI
Ima li ko da odgovori koji je kompajler najbolji za grafiku
Re: Najbolji kompajler 10.12.2007. u 12:19 · pre 230 meseci #25
Citat:
icobh: Mene zanima jedna stvar. Zašto mogu da ovaj kôd kojeg sam ja lično pisao, da kompajliram kod sebe, kolege, na faxu i to sa bcc-om, msvc-om ali ne i sa gcc-om? Zašto to? Zašto to sad jedno const igra toliku ulogu?


Pretpostavljam zato što standard (ANSI, ISO, šta li) negde kaže da je prototip kopirajućeg konstruktora je T (const T &) i nikoji drugi. GCC ti onda u poruci greške praktično kaže da tvoja klasa nema ispravan kopirajući konstruktor. Dakle, GCC se podrazumevano (bez posebnih opcija) ponaša po standardu — što je dobro — dok ti na faksu i kod kolege ne — što je loše. Kao što Nemanja već reče.

E sad, i standarde pišu ljudi, pa je uvek bitno uočiti zašto je dobro tako kako je standard propisao. Kopirajući se poziva u mnogim situacijama nad objektom koji je privremeno konstruisan u lancu naredbi. Tada, ako bi mu bilo dozvoljeno da prima nekonstantni upućivač, prvo bi mogao da izmeni taj privremeni objekat (znači mogući gubitak podataka), i drugo ne bi mogao više da funkcioniše kada se u lancu pojavi konstantan objekat. Zato nema smisla da kopirajući prima nekonstantni upućivač.

Na strani izvedbe, GCC bi (kao i ti drugi) po uobičajenom mehanizmu poklapanja poziva i prototipa mogao komotno da pozove onaj sa nekonstantnim upućivačem. Dalje, ako ispratiš redosled poziva pri izvršavanju, videćeš da GCC nigde nije ni pozvao kopirajući; npr. Skup tmp3(c.unija(a.unija(b))), uz drugačije definicije ovih funkcija, moglo je biti i brzinski optimalnije Skup tmp3; unija(a, unija(b, unija(c, tmp3))), što je GCC primetio i sam transformisao u izlaznom kôdu. Drugim rečima, GCC je em mogao da pozove prvobitni kopirajući, em mu kopirajući čak nije ni trebao, pa ti je opet prijavio grešku. To znači da su se programeri koji rade na GCCu morali potruditi da dodaju ovo kao posebnu mogućnost, a koja se tebi čini kao njegova loša osobina :)

Kad već pomenuh gore automatsku optimizaciju, probaj sa tim BCCom i MSVCom da prisiliš poziv kopirajućeg. Npr. staviš Skup tmp1b(tmp1);, i daj kopirajućem da nešto ispiše, da budeš siguran da je pozvan. Da li tada kôd i dalje prolazi? (Moguće je da su se zeznuli pri optimizaciji, da ne proveravaju prototip kopirajućeg kada primete da nije ni potreban.)
Re: Najbolji kompajler 10.12.2007. u 14:09 · pre 230 meseci #26
@Časlav Ilić
Probao sam:
Code:
Skup tmp1b(tmp1);

gdje sam konstruktor kopije prvo napisao bez const u parametru pa sam onda sa const. I MSVC i BCC gutaju oba kôda i sve radi. Konstruktor kopije se regularno poziva u oba slučaja. Samo GCC neće bez const.

@perun_
Npr. Ovaj kôd guta GCC a vidi se da fali int prije main. Dok MSVC kaže da u C++-u ne važi int-default. BCC takođe kompajlira bez problema...
Code:
#include <iostream>

using namespace std;

main() {
    system("pause");
    return EXIT_SUCCESS;
}
Potpis
I ♥ ♀

Ovaj post je zlata vrijedan!
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme