Mitä globaaleja muuttujia ja globaaleja olioita tavallisesti tai silloin tällöin on käytössä tai olisi hyvä olla käytössä? Tämä on tärkeää myös siksi, että tietäisi välttää tiettyjä nimiä jos aikoo yhdistää muiden c:tä omiinsa.
Esimerkiksi satunnaisolion olisi hyvä olla globaali olio, viitteenä ( &, ja-merkki ) välittämisen sijaan.
Globaalit muuttujat
6
352
Vastaukset
Jos käyttää globaaleja muuttujia, silloin todennäköisesti tekee jotain väärin. Niitä käytetään vain harvinaisissa poikkeustapauksissa.
- Delete Program ? (Y)
Jos jotain vakiota tai muuttujaa tarvitaan yhtenään ja joka puolella ohjelmaa, on sen laittaminen yleiseksi muuttujaksi tai vakioksi perusteltua. Yleensä käyttö rajoittuu vakioihin, mutta joskus on kätevää ohjata rinnakkaisia prosesseja kuten (säikeitä) erilaisilla lipuilla. Se tulee tehdä harkiten ja dokumentoida huolella, koska kyseisten muuttujien käyttö tulee olla täysin sidoksissa vain yhteen ja tiettyyn tarkoitukseen. Järkevintä on tuolloin tehdä noille vakioille oma modulinsa ja antaa kaikkien muiden ohjelmaosien nähdä kyseinen moduuli kutsuttavana "alirutiinina".
Kuitenkaan ei ole olemassa mitään varsinaista säännöstöä muuttujien nimeämiseen tai edes kirjoitustyyliin. Tulet itse sen huomaamaan, kun toisten kirjoittamia ohjelmia joudut enemmän tonkimaan. Eri ohjelmoijat kirjoittavat asiat aina eri tavalla, vaikka olisivat alunperin opiskelleet alaansa samassa opinahjossa.- Deopuk
Voisiko yksi mahdollisuus olla tällainen:
int gVerbosity=0;
int gDebug=0;
Eli oletuksena on ettei main eikä oliot anna ilmoituksia, ja osat toimii nopeammassa moodissa eikä varmemmassa moodissa.
Jos gDebug on 0, niin esim. vectorista haetaan alkio tavalla jokuvector[a]; eikä jokuvector.at(a); ja kaikenlaisia aikaavieviä tarkistuksia sivuutetaan kaikissa olioissa ja funktioissa.
Arvo voisi olla 0, 1 tai 2.
Onko tämä oikein ja tehokasta?
Sitten voisi kanssa olla laskurimuuttuja joka laskee tiettyyn kategoriaan kuuluvien luokkien olioiden käyttökertoja. - Ei mitaan epaselvaa
Deopuk kirjoitti:
Voisiko yksi mahdollisuus olla tällainen:
int gVerbosity=0;
int gDebug=0;
Eli oletuksena on ettei main eikä oliot anna ilmoituksia, ja osat toimii nopeammassa moodissa eikä varmemmassa moodissa.
Jos gDebug on 0, niin esim. vectorista haetaan alkio tavalla jokuvector[a]; eikä jokuvector.at(a); ja kaikenlaisia aikaavieviä tarkistuksia sivuutetaan kaikissa olioissa ja funktioissa.
Arvo voisi olla 0, 1 tai 2.
Onko tämä oikein ja tehokasta?
Sitten voisi kanssa olla laskurimuuttuja joka laskee tiettyyn kategoriaan kuuluvien luokkien olioiden käyttökertoja.Käsittämätöntä, että pitää käyttää tuollaisia itse keksimiä, epästandardeja ja epäkieliopillisia lyhenteitä, kun voi ihan yhtä hyvin tituleerata muuttujaa tai oliota tasan sillä, mikä se onkin: TCar* RedConvertibleCar; TSparePart BrakeDisk;
Jossain muussa lähdekooditiedostossa määriteltyä muuttujaa käytetään external: ina ja jos ei käytetä se on kääntäjän mielestä eri muuttuja kuin siellä toisessa tiedostossa eikä mitään vaaraa sekaannuksista ole, vaikka käyttäisi samaa nimeä. - Ogma
Deopuk kirjoitti:
Voisiko yksi mahdollisuus olla tällainen:
int gVerbosity=0;
int gDebug=0;
Eli oletuksena on ettei main eikä oliot anna ilmoituksia, ja osat toimii nopeammassa moodissa eikä varmemmassa moodissa.
Jos gDebug on 0, niin esim. vectorista haetaan alkio tavalla jokuvector[a]; eikä jokuvector.at(a); ja kaikenlaisia aikaavieviä tarkistuksia sivuutetaan kaikissa olioissa ja funktioissa.
Arvo voisi olla 0, 1 tai 2.
Onko tämä oikein ja tehokasta?
Sitten voisi kanssa olla laskurimuuttuja joka laskee tiettyyn kategoriaan kuuluvien luokkien olioiden käyttökertoja.Globaalien muuttujien käyttö on yleensä hankaluuksien kerjäämistä, vaikka joskus niitä tarvitaankin.
Yleisesti ottaen globaalit muuttujat tulisi paketoida luokaksi (Singleton-suunnittelumalli; Eric Gamman et.al. kirjasta), jolloin globaalit pääsisivät tavallaan omaan nimiavaruuteensa ja niiden elinaika olisi mukavasti hallussa.
Tässä kyseisessä esimerkkitapauksessa käyttäisin jotain loggausluokkaa (valmiina esim. Log4Cxx tai vastaava), jolla pystyy asian hoitamaan kauniisti ilman kikkailuja. Toinen tapa on käyttää C:n makroja hyväksi, jotka toisella vipusella tuottavat loggauskoodin ja toisella lörpöttelytason tms.
Kuten M-Kar asian ilmaisi on globaalien muuttujien käyttö yleisesti merkki potentiaalisesti riskialttiista suunnittelusta ja tarve lisäsuunnittelulle on ilmeinen.
Ja mitä tulee vektoriesimerkkiin, niin aikaavievillä tarkastuksilla on syynsä ja paikkansa ja jos käytät standardeja C kirjastoja, niin ne on melko nopeita yleisesti ottaen. Mutta jos ole varma, ettei sinulla tule off-by-one tyyppisiä virheitä, niin silloin ehkä. Harvemmin olen kuullut ohjelman suoritusnopeuden olevan kiinni std C kirjastoista vaan se hitaus on jossain muualla.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Metsäkoneen kuljettaja huuteli tutkijalle
"voisit kyllä ottaa rintaliivit pois ennen kuin tulet minulle juttelemaan, hän sanoo." https://yle.fi/a/74-20106446 On70410100Suomi on täysin sekaisin
Jo ties monettako päivää hirveä itku ja poru jostain helvetin nilviäisistä. https://www.is.fi/taloussanomat/art-20000104154422Kaikki ei vieläkään usko luontokatoon.
Suomussalmen Hukkajoella foliohattu metsäkoneen kuljettaja tuhosi tuhansia harvinaisia jokihelmisimpukoita eli raakkuja913036Sano vain suoraan, että nyt riittää
ettei kiinnosta. Sano, että lopeta! En ihmettelisi, jos olet saanut tarpeeksesi ja toivot minun ymmärtävän lopettaa. Eh432865Ohhoh! Ex-pääministeri Sanna Marinin Joni-rakas paljasti ilouutisen: "Tässä kuussa..."
Sanna Marin on ollut naimisissa Markus Räikkösen kanssa. Nyt hänen seurassaan on usein julkkishiusmuotoilija Joni Willb552674Mari Rantanen asettaa sairaan lapsen edun oman uransa edelle - (tekikö Marin samaa)
Noin toimii kunnon vastuuntuntoinen äiti, mutta siitäkin nämä mt-ongelmaiset vasemmistolaiset häntä täällä haukkuvat. "2302668- 1531855
Luokatonta toimintaa
Tyrmistyttävää toimintaa Stora Enson korjuu yrittäjältä Hukkajoella. Täyttä piittaamattomuutta laeista ja luontoarvoista731722Ensimmäisestä kohtaamisesta saakka
minulla on ollut hämmentynyt olo. Miten voit tuntua siltä, että olisin tuntenut sinut aina? Sinun kanssasi on yhtä aikaa141630Maailmankuulu homopingviini on kuollut
Minä niin toivoin että pariskunta olisi saatu kunniavieraiksi ensi kesän Prideen. 💔 "Maailmankuulu homopingviini on k61433