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
393
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
Mitä yhteistä on sulla ja kaivatulla?
Onko teillä samantyyppinen olemus tai luonne? Vai muistuttaako vartalonne toisiaan? Tai kasvot? Entä pukeutuminen? Onko991546Kerran oltiin mekin kahdestaan
Saanko sanoa, että minua kyllä vähän huvitti jälkeenpäin? Olit kuin vapiseva jänis ketun vieressä valmis loikkimaan paik131216- 2301200
Persut yritti estää somalinaista väittelemästä lääketieteen tohtoriksi
Yrittivät saada hänet lähihoitajakouluun, vaikka pärjäsi hyvin koulussa. Nyt hän on yliopistossa väitellyt lääketieteen2671068Oikeasti, voitais mennä kahville
ja jutella niin kuin normi-ihmiset. Kyllä toivon sitä. En pelkää kohdata enkä istua sun kanssa samassa pöydässä. Miten o81989- 141970
Jos nainen harrastaa seksiä
Useiden kanssa, miten se eroaa miesten mielestä siitä, jos miehellä on ollut useita s kumppaneita? Oletan että kaikki mi179963Pihlaja-puulle
Illat on mulle pahimpia. En tiiä miks se olis vaan parasta yöstä toiseen nukkua sun kanssa ja herätä sun kasvoihin. Jos15949- 74819
Yritin keväällä unohtaa sinut nainen
mutta siinä kävi niin, että ikävä tuli korkoineen takaisin. Niin että mikä taikavoima sinulla on minuun, sitä joutuu mie33812