g++-4.1 és 4.3 rand() srand() time() (#include <cstdlib> és #include <ctime>) különbség

 ( lzrd | 2008. november 15., szombat - 12:47 )

Tiszteletem!

Van egy forrásom, amiben szerepel rand(), srand() és time() függvény.
A beemelt fejállományok között nem szerepel se a cstdlib, se a ctime.
(Csak vector, iostream és string fejállományok vannak)

Ez g++ 4.1-es verzióval hibaüzenet nélkül lefordul és jól működik.
4.3-as viszont
proba.cpp: In function ‘int main()’:
proba.cpp:9: error: ‘srand’ was not declared in this scope
proba.cpp:10: error: ‘rand’ was not declared in this scope
hibaüzenettel megtagadja a munkát.
Nekem úgy tűnt a referenciakönyv olvasgatása alapján, hogy ahhoz, hogy legyen
time(), rand(), srand() függvényem, be kell foglalni a cstdlib és ctime
fejállományokat is. Amint ezt megtettem, mindkét verzió lefordította
a kódot és működik is.

A kérdésem az, hogy mi az oka annak, hogy 4.1 nem panaszkodott a jelzett két
header hiányára, vagyis honnan tudott a rand(), srand() és time() függvényekről?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Csak egy tipp: 4.1 ben valahol melyen az includeolt fileok altal includeolt fileok altal includeolt fileok .... lista aljan valahol ott szerepelt a cstdlib meg a ctime.
Teljesen normalis, hogy ha van egy fuggvenyed aminek a deklaraciojahoz be kell includeolni egy fajlt, es kifelejted az includeot, akkor a deklaracio vagy ott lesz vagy nem - esetleg a kovetkezo verzioban eltunik, vagy megjelenik. Ezert kell mindig includeolni fuggetlenul attol, hogy fordul vagy sem.
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

Valami hasonló nekem is eszembe jutott, de nem tartottam esélyesnek. Most, hogy másnak is eszébe jutott, csak megnézem :D
--
unix -- több, mint kód. filozófia.
Life is feudal

beemelt fejállományok :) ...az ilyen kifejezéseken nem tudom, hogy sirjak, vagy nevessek :)

Az ilyen tartalmas hozzászólásokon nem tudom sírjak, vagy nevessek.
--
unix -- több, mint kód. filozófia.
Life is feudal

Pedig jobb ha itt és most értesülsz arról, hogy azt 'inkludált heder'-nek hívják a szakmában, és nem az első munkahelyeden csúszik a szádon olyasmi, hogy 'beemelt fejállomány'... holtig azzal cikiznének a kollégáid...

"inkludált heder" LOL. Mindig tudtam, hülyék a programozók, de ennyire... (hm, pályát tévesztettem volna?)

Az "included header" amúgy minden stimmel :)

Ennél cifrábbak is elő szoktak fordulni! :)
--
Bárki aki aritmetikai módszerekkel akar előállítani egy véletlen számot, az a bűn állapotában leledzik.

a "túlterhelés" a kedvencem:)

Mondj jobbat. Az "overload" és hunglish verziói közül egyik sem ér (gy.k. fentiek alapján "óverlód", áááá).

sztem, nem kell feltétlenül mindent, minden áron magyarositani... óverlód tökéletessen hangzik, és mindenki tudja miről van szó!

Több súlyos probléma akad a te és a "kollegád" beszólásával, de lusta vagyok ezzel foglalkozni.
--
unix -- több, mint kód. filozófia.
Life is feudal

Nezd, tul azon, hogy a stilusan meg igencsak volna mit csiszolni, abban igaza van, hogy keruelndok az ilyen eroltetett forditasok a szaknyelvben. Mert egy targyalason sem azt mondod, hogy a PiciPuha ceg Ablakok 2003 muveleti rendszeret telepitjuk a kiszolgalo szamitogepekre, hanem azt, hogy a Microsoft Windows 2003 operacios rendszeret installaljuk az uj szerverekre. Namarmost, ebben a mondatban a kotoszavakon kivul eleg keves magyar szo van.
Szoval el kell valasztani a szaknyelvi szavakat, es igenis azt kell hasznalni, nem pedig az olyan eroltett dolgokat, hogy 'beemelt fejallomanyok'. Igen, az include-olt header-ekrol van szo. Raadasul meg a forditas sem helyes, mert nem te emeled be, hanem majd a fordito, es a header igazandibol nem fejallomany, hanem egy definicios fajl.
Nem mondom, hogy beszelj tisztan angolul, de az angol szakszavaknak igenis van letjogosultsaguk.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Na látod! Pont ez a különbség kettőtök között!
Egy percig nem vitázom azzal, amit írsz. Sőt! Elfogadom amit mondasz (Írsz) és köszönöm a helyreigazítást! Ez, ebben a stílusban, ahogy előadod, tök korrekt. Nekem a "kollega" stílusával volt bajom. Simán a szememre vetheti bárki, hogy nem használom helyesen a szakkifejezéseket, sőt, elfogadom azt is, hogy mások véleménye különbözhet az enyémtől. Én, amit lehet, magyarul próbálom kifejezni. Ha egy társaságban ez problémát jelent, akkor igyexem alkalmazkodni és akkor ott használom az angol változatot. De arra a hozzászólásra nem sikerült különbet reagálnom sajnos.
--
unix -- több, mint kód. filozófia.
Life is feudal

Azért nem jó a példád, mert a Microsoft tulajdonnév, a Windows 2003 egy márka, az operációs rendszer meg már egy elterjedt fogalom. Az inlude-olt header viszont egy sima mezei fogalom.

Nem tudom, mi lenne, ha egyszer eldöntenétek azt, hogy angolul vagy magyarul beszélnétek, nem pedig össze-vissza. Egy angol embernek sem fogsz magyar szavakat mondogatni, nem? Akkor fordítva sem tedd. Persze, érvelni lehet, hogy az informatika nyelve az angol, de akkor könyörgöm, miért vannak ezek az idétlen szavak magyar mondatokban? Ja tudom, kettős mérce, már nem csak a politikában.

Kettős mérce már elavult fogalom. A trendi kifejezés a tarka mérce :P
--
unix -- több, mint kód. filozófia.
Life is feudal

Panther, ez megint egy olyan dolog. Persze, bele lehet a peldaba is kotni, meg az ekezettelensegbe, meg 80 dologba bele lehet kotni a kommentembe, de ha megerted a lenyeget, hogy egy nagyon csunya peldat akartam irni, akkor mindjart mas a helyzet.

En peldaul hasznalok szakszavakat is, meg leforditott verziot is - de ez utobbit csak akkor, ha mar mint szo, beepult a nyelvbe (mittom en, a compiler szot utalom, fordito-nak mondom, az interpreter neha ertelmezo, meg ilyenek). Mas a helyzet az ilyen eroltetett forditasokkal, mint 'beemelni a fejallomanyt', ezeket ott kerulom, ahol lehet. Nyilvan nem lehet egyertelmu szabalyt megfogalmazni ezekre, de az ember altalaba maga is erzi, hogy ezeket valaki, valahol fegyveres fenyegetettseg mellett honositotta.

Itt nem kettos merce van, hanem igenis szakszavak. Menj el korhazba, es hallgasd meg, mit beszelnek orvosok vizitkor (telleg, nem is kell elmenni, nezd meg a Dr. House egy reszet). Tele van latin kifejezesekkel a beszeduk. Vagy nekik lehet, mert ok orvosok? Akkor hol is a kettos merce?
A cluster, interpreter, virtual host, domain - noha angol szavak is egyben - kulonbozo szakmai fogalmakat jelolnek, melyek jol megerthetok a szavakat nezve. Furt, ertelmezo, virtualis gep (tenyleg, van erre egyaltalan forditas??), tartomany - nem mondom, hogy mindegyik tobbertelmu, de legalabbis furcsa.
Nyilvan egy szovono sosem fogja ezeket a szavakat hasznalni, ha nem foglalkozik az IT temakorevel behatobban - de elnezest kerek, en IT szakmunkas vagyok, en mar hadd hasznaljam ezeket a szavakat!
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Én úgy vagyok vele, hogy amikor csak lehet, magyarul beszélek, ha pedig ez sért másokat, akkor hajlandó vagyok az angol megfelelőjét használni.
--
unix -- több, mint kód. filozófia.
Life is feudal

Nem serto - csak sokan es furan fognak radnezni - na azokat a szavakat permanensen mondhatod angolul.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Szabvanyos C fuggvenyeket (nehe) megragja header nelkul is, de ezt egy warning kiseri C kod eseten.

hello.c:2: warning: incompatible implicit declaration of built-in function ‘printf’

Es nem is boztos hegy tenyleg printf kerul majd kodba ilyenkor, hello word eseten tenylegesen puts kerul bele. (mivel egy egy argos printf mas nem lehet, ha jot akkar a felhasznalo)

g++ nekem sem eszi meg.


Amit nem lehet megirni assemblyben, azt nem lehet megirni.