Globaalit muuttujat

Deopuk

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.

6

328

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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.

      • Itse kirjoitaan globaalit muuttujat muotoon gMuuttuja. Erottaa hyvin sitten.


      • 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

    1. Pupuhuhdasta löytyi lähes sadan kilon miljoonalasti huumeita

      Pupuhuhdasta löytyi lähes sadan kilon miljoonalasti huumeita – neljä Jyväskylän Outlaws MC:n jäsentä vangittu: "Määrät p
      Jyväskylä
      58
      2342
    2. Persut petti kannattajansa, totaalisesti !

      Peraujen fundamentalisteille, vaihtkaa saittia. Muille, näin sen näimme. On helppo luvata kehareille, eikä ne ymmärrä,
      Maailman menoa
      73
      1970
    3. Istuva kansanedustaja epäiltynä pahoinpitelystä ja ampuma-aserikoksesta

      Seiskan tietojen mukaan Timo Vornanen on epäiltynä pahoinpitelystä ja ampuma-aserikoksesta eikä kenellekään taatusti tul
      Maailman menoa
      175
      1766
    4. Ei luottoa lakko maahan

      Patria menetti sovitun ksupan.
      Suomen Keskusta
      56
      1747
    5. Nähtäiskö ylihuomenna taas siellä missä viimeksikin?

      Otetaan ruokaöljyä, banaaneita ja tuorekurkkuja sinne messiin. Tehdään taas sitä meidän salakivaa.
      Ikävä
      4
      1651
    6. Sinäkö se olit...

      Vai olitko? Jostain kumman syystä katse venyi.. Ajelin sitten miten sattuu ja sanoin ääneen siinä se nyt meni😅😅... Lis
      Ikävä
      4
      1629
    7. Housuvaippojen käyttö Suomi vs Ulkomaat

      Suomessa housuvaippoja aletaan käyttämään vauvoilla heti, kun ne alkavat ryömiä. Tuntuu, että ulkomailla housuvaippoihin
      Vaipat
      1
      1524
    8. Hyvää yötä ja kauniita unia!

      Täytyy alkaa taas nukkumaan, että jaksaa taas tämän päivän haasteet. Aikainen tipu madon löytää, vai miten se ärsyttävä
      Tunteet
      5
      1367
    9. Lepakot ja lepakkopönttö

      Ajattelin tehdä lepakkopöntön. Tietääkö joku ovatko lepakot talvella lepakkopöntössä ´vai jossain muualla nukkumassa ta
      7
      1321
    10. Revi siitä ja revi siitä

      Enkä revi, ei kiinnosta hevon vittua teidän asiat ja elämä. Revi itte vaan sitä emborullaas istuessas Aamupaskalla
      Varkaus
      1
      1228
    Aihe