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

Fórumok

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ások

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.

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

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.

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.

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.