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

414

    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. Kaipaamasi miehen nimi?

      Ja maakunta tai kaupunki?
      Ikävä
      43
      7515
    2. Oletko keskustellut kaivatustasi muiden

      Kanssa lähiaikoina? Jos, onko keskustelu ollut positiivista tai negatiivista? Vaikuttaako keskustelut mielipiteeseesi ka
      Ikävä
      54
      3723
    3. Ennen ei ollut persuja ja työttömyyttä, lääkäriinkin pääsi

      Ennen oli kaikilla töitä Kauppiaille kelpasi kun saivat voittoa Yritystukia ei ollut Lääkäriin pääsi kaikki haluklaat Nu
      Maailman menoa
      53
      3613
    4. Millaista läheisyyttä

      Toivoisit ikävästi kohteesi kanssa?
      Ikävä
      85
      3397
    5. Tulipalossa henkilövahinkoja, itsenäisyyspäivä alkoi huonosti, poliisi tiedottaa lisää

      Savonlinna https://www.como.fi/uutiset/savonlinna-henkilovahinkoja-tulipalossa-poliisi-tiedottaa-lisaa/
      Savonlinna
      53
      3361
    6. 51
      3044
    7. Kyllä on Vasemmistoliitosta Koskelan johdolla tullut todellinen ääripuolue

      se on niin tulipunainen kuin olla voi, ja selvästi haluaa jatkuvasti eripuraa, ja repiä kansaa kahtia. Siinä on jo vuod
      Maailman menoa
      36
      2842
    8. Antifasismi - mitä se on?

      Se on äärivasemmistolaista anarkistista toimintaa joka käyttää fasisminvastaisuutta keppihevosena oikeuttaakseen toimint
      Maailman menoa
      30
      2494
    9. IL- KELA:n pääjohtaja, lääke- ja oikeustieteen tohtori Lasse Lehtonen sekavassa tilassa Brysselissä!

      "Iltalehden tietojen mukaan Lehtosen käytös Brysselin lentokentällä on herättänyt huomiota, ja hänen olemuksensa on tulk
      Maailman menoa
      197
      1958
    10. Heräsin taas ikävään

      Ja aivan valtavaan haluun. Tahdon sinua R. ❤️
      Ikävä
      47
      1571
    Aihe