Novo

Forum kao aplikacija na telefonu

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

  • 11 odgovora
  • 5.450 pregleda

Najnovija ↓

Cudno ponasanje kompjalera!? 22.07.2003. u 03:27 · pre 283 meseca #1
Pozdrav narode,

Imam jedno pitanje:
Program koji je ukljucivao definisanje array-a preko string funkcije size() nisam uspeo da kompajliram pod borlandom 5.5 i Visual C++ 6.0, ali je zato perfektno radio sa gcc i MinGW.

Pa, ko odstupa od ISO C++ standarda u ovom pitanju i koliko je to rasprostranjeno po ostalim delovima kompajlera koji su prisutni. Hocu reci da li postoje vece razlike u razlicitim kompajlerima ili je sve to zanemarljivo.

Re: Cudno ponasanje kompjalera!? 22.07.2003. u 06:15 · pre 283 meseca #2
Možeš li da tačno navedeš kod koji je pravio probleme? U principu, VC 6.0 nije preterano u skladu sa standardom (što i nije čudno s obzirom da je objavljen pre standarda), ali nikad se ne zna.
Potpis
IOCC
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 11:45 · pre 283 meseca #3
Da, bilo bi lepo ako kritikujes da to obrazlozis sa primerom, pa da vidimo da li gresis ili ne, ovako sve ostaje samo na tvojim (za sada praznim) recima.
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 19:29 · pre 283 meseca #5
Nije mi bila namera da kritikujem ni VC ni Borland ni GCC ni MinGW. Tek pocinjem da ucim C/C++ i ne treba mi nikakav flame vec konkretno koji od ova 4 kompajlera je najpriblizniji standardu, da bih znao koji od njih da koristim.

Kod izgleda ovako otprilike:

Code:


#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
     string line = string (argv[1]);
     int l [line.size()];

     return 0;
}



Molim vas ako nesto ovde nije dobro ispravite me, jer sam manje vise radio po Eckelovoj knjizi. Ako vi niste naisli na ovako nesto i ako je ovaj kod tacan da li je moguce da su kod mene nekako osakaceni kompajleri?

Ponavljam ovo nije kritika vec pitanje koji od ova 4 kompjalera najpribliznije odgovara standardu, da bih taj koristio (ne vredi da ucim po necemu sto nije tacno, zar ne?).

PS:
Dao sam samo segment koda jer je ostatak manje vise nebitan (Borland i VC mi gresku prijavljuju kod int l [line.size()], dok GCC i MinGW prolaze).
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 19:37 · pre 283 meseca #6
Ova linija

int l [line.size()];

Nije ispravna po C++ standardu. Dužina ovako definisanog niza mora biti poznata u vreme kompajliranja - dakle konstanta.

Međutim, po C99 standardu (koji je C, a ne C++ standard), ovako nešto je dozvoljeno i verovatno zato prolazi sa gcc-om (uzgred, nisi napisao koja verzija). Međutim, pošto je tvoj program očigledno C++ a ne C, definitivno bi kompajler trebalo da prijavi grešku. No, sad ću da probam da kompajliram sa gcc-om, pa da vidim šta se zaista dešava.

[Ovu poruku je menjao Dragi Tata dana 22.07.2003. u 09:56 GMT]
Potpis
IOCC
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 19:45 · pre 283 meseca #7
Hmmmmm...

Code:

E:\arraytest>g++ main.cpp -o array.exe

E:\arraytest>dir
 Volume in drive E is 19gb
 Volume Serial Number is DC54-815F

 Directory of E:\arraytest

07/22/2003  08:26a      <DIR>          .
07/22/2003  08:26a      <DIR>          ..
07/22/2003  08:26a             449,085 array.exe
07/22/2003  08:24a                 189 main.cpp
07/22/2003  08:22a                   0 main.cpp~
               3 File(s)        449,274 bytes
               2 Dir(s)  11,420,049,408 bytes free

E:\arraytest>array.exe

abnormal program termination

E:\arraytest>g++ -v
Reading specs from C:/MinGW/bin/../lib/gcc-lib/mingw32/3.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=f77,c++,objc,ada --disable-win32-registry --disable-shared
Thread model: win32
gcc version 3.2 (mingw special 20020817-1)

E:\arraytest>


Leko?
Potpis
IOCC
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 20:22 · pre 283 meseca #9

Na gcc 3.2.2, linux kompajliranje prolazi i to se slaže sa Tatinom primedbom.

Samo mi nije jasno šta se dešava kada se program pokrene bez argumenata pa je line.size()==0? Inače to proizvodi abnormal program termination, odn. Aborted poruku, a ne mešanje standarda.

Druga stvar koja je možda bitna jeste da metod size() vraća veličinu strukture koja pamti string, a da se dužina stringa dobija sa length()!

f
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 20:52 · pre 283 meseca #10
OK znaci int l [line.size()] je ilegalno i ne bi trebalo da prodje ni kod jednog.

Puno hvala, ljudi!

PS:
Kod je bio za vezbu, pa nisam hteo da se petljam sa uslovima, i zato nisam pokrio situaciju kada je bez argumenata.

PPS:
Gde moze da se nadje neka referenca sa tim standardom da vise ne moram da razbijam glavu o tome sto ovo radi pod gcc-om, a ne pod borlandom i obrnuto, vec da pogledam tamo oko ovih i slicnih propusta.
Re: Cudno ponasanje kompjalera!? 22.07.2003. u 21:08 · pre 283 meseca #11
Inače, da odgovorim na tvoje pitanje o kompajlerima i standardu. Koliko znam, postoji samo jedan kompajler koji je 100% u skladu sa standardom, a to je Comeau 4.3.0. Međutim, moj je savet da se držiš dva kompajlera, a to su Visual C++ 7.1 (besplatna verzija kompajlera je uključena u .NET SDK 1.1) i gcc (mingw) od verzije 3 pa naviše (ne mogu da verujem da nekom preporučujem GNU software, mora da sam ostario :) ). Oba su dosta dobro usklađena sa standardom a koriste se mnogo više nego Comeau.
Potpis
IOCC
Re: Cudno ponasanje kompjalera!? 23.07.2003. u 04:14 · pre 283 meseca #12
Cini mi se da je ovo gnu ekstenzija, mislim da je radilo i sa starim verzijama.

Trebalo bi da postoji opcija koja zahteva iso kompatibilnost koda (ne secam se tacno koja je)
pogledaj info gcc

pozdrav,
Dule
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme