C++-ban mire való és mikor érdemes használni a volatile-t?
Ez jelzi a forditonak, hogy az adott valtozo barmikor megvaltozhat, nem szabad kioptimalizalni.
Erre az atomeromuves peldat szoktak hozni:
(volatile) int vizhomerseklet;
while(1) {
__ if (vizhomerseklet > 95) szirenazik;
__ (a cikluson belul semmi mas kod nem allitja a vizhomersekletet)
}
Mivel a vizho a program szerint nem valtozik, leellenorzi egyszer. Ha inditaskor hideg volt, soha nem fog szirenazni.
Pelda amivel talalkozhatsz is:
Mikrokontrollerek vezerlese C-ben. Az egyes Pinek allasa a memoriara le van kepezve. Mivel ezt kivulrol egy kapcsoloval valtoztathatod, volatile nelkul a fordito altalaban kihagyja.
Nem azt jelzi, hogy nem szabad kioptimalizálni, hanem azt, hogy adott változó tartalma programon kívülről változhat és ezt vegye figyelembe a fordító.
Az előttem szóló jót ír, csak az első mondata helytelen.
Higgyünk inkább a C++ szabványnak:
"Volatile is a hint to the implementation to avoid aggressive optimization involving the object
because the value of the object might be changed by means undetectable by an implementation."
Nem fordítom le, mert az #1 válaszoló már megtette.
3-as: Nem nézek utána, de ha ez a c++ szabvány, akkor jó nagy hülyeség. Te ugyanakkor annak hiszel aminek akarsz, de a lényegen ez nem változtat. A 'volatile' kulcsszó szerepe, hogy az ezzel jelzett változó tartalma a programon kívül is megváltozhat. Nincs itt szó semmiféle optimalizációról, kivált, hogy előfordulhat, a fejlesztő mondjuk nem is igen akar optimalizáltatni a fordítóval.
Ezerszer, ha nem többször használtam a kulcsszót, pontosan ismerem a szerepét, így fölöslegesnek tartom, hogy te 'megmagyarázd' nekem, a kérdezőnek, egy kétsoros idézetre való hivatkozással, ráadásul rosszul.
Nincs szó hisztiről, csak nem látom értelmét annak, hogy egy jó választ valaki megpróbál valami oda nem való butasággal annulálni, felülírni.
Te egyébként sem a szabványt idézted, hanem a stacoverflow-ról valakit, aki, elmondása szerint a szabványra hivatkozik. Itt a link, amit lefelejtetél:
A szabványok, ezen vitán túl, egyébként sem szentírások, nem véletlen, hogy úton-útfélen hanyagolják, vagy meghágják őket, ha arra éppen szükség van. Az meg maradjon a te bajod, hogy nem tudsz sem angolul, sem programozni, de mást az ebből eredőekkel szerintem ne terhelj.
Hát ez kész :D
Nem SO-ról idéztem hanem a szabványból, de ha megnézed az SO-n az idézetet, így kezdődik: "According to the C++ standard ($7.1.5.1/8)"
Úgy tűnik ő is fel tudja lapozni a szabványt, nem egy nagy művészet :)
Bocs de egy kicsit vicces ahogy próbálod megmagyarázni hogy a C++ nyelv szabványa butaság és márpedig neked van igazad. A szabvány az ami megmondja mi a C++ nyelv és mi nem. Más kérés hogy vannak rossz programozók akik nem ismerik a nyelvet...
De azért folytasd csak :)
"de ha megnézed az SO-n az idézetet, így kezdődik:"
A kérdés viszont EZ: "C++ Why does the “const volatile” type qualifier"
Amire a kérdező alább meg is kapja a kielégítő választ.
Veled az a baj, hogy olyasmibe ütöd bele az orrodat, amihez nincs sok közöd és olyasmire hivatkozol, amit nem értesz és ami a jelen kontextuson ráadásul kívül is esik.
Ugyanis az optimalizálás használatának mellőzése esetén is kell használni a 'volatile' kulcsszót, ebből következik, hogy a volatile szerepe kívül esik az optimalizálás körén. Tehát, nem igaz az, hogy a volatile azért szükséges, amit az általad idézett sor ír. Egyszerűbben fogalmazva, nincs helye az idézetednek, még annyira sem érdemes megfontolni a felszólításodat, mely arra buzdít, hogy 'higgyünk inkább a C++ szabványnak'.
Ez kb. olyan, mint amikor a politikus megkérdezte a parasztokat a helyzetükről, hogy milyen is az, azok meg válaszoltak, hogy 'jó'. Megkérdezte, 'bővebben'? Azok meg válaszoltak, hogy 'nem jó'.
A c++ szabványa egyébként NEM a c++ nyelv definíciója, hanem a c++ nyelv egyik ajánlása. A kettő azonban koránt sem ugyanaz.
Nem véletlen, hogy kismillió olyan fordító létezik, amely nem szabványos, attól többé vagy kevésbé eltér, de ettől függetlenül használatos, mert jobbat vagy többet nyújt a szabványban rögzítettnél, viszont a fejlesztők nem tartják fontosnak, hogy a módosításaikat a szabványba beemeljék vagy beemeltessék.
Ezt csak mellékesen jegyzem meg, nem célom a c++ szabványának minősítése.
A hevenyészett utánaolvasásom szerint egyébként a volatile kulcsszót 1999-ben emelték be a c (!) szabványába, holott, mint az nyilvánvaló, korábban is használatos volt. Nem véletlenül. Szép is lett volna, ha valaki akkor is a c nyelv szabványára hivatkozott volna.
A kérdező számára hangsúlyozom, e polémiát hagyja figyelmen kívül és hagyatkozzon arra amit korábban írtam.
De ha ez nem győzi őt meg, keressen egyetemi jegyzeteket.
Az lényegtelen, hogy c vagy c++, a két nyelvben az ominózus kulcsszó használatának célja pontosan ugyanaz.
Itt egy szerintem remek kis írás a volatile kulcszó szerepéről, amely a szerepének hangsúlyozása mellett a túlzó használat veszélyeire is kitér.
Valahogy több értéket képvisel a szememben a standard, mint egy neten pattogó megmondó emberé, aki hülyeségeket beszél.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!