järjestyksellä väliä?

aloittelija_19

Tässä olis guruille pähkinä purtavaksi. Elikkäs kyse on pointtereista ja argumenteista. Miksi C koodi pitää aloittaa aina aliohjelmalla, kun käytetään pointtereita ja argumentteja.

esimerkiski tälläinen koodipätkä toimii vain toisinpäin, miksi? Voiko C kääntäjillä olla eroja siinä että jotkut kääntää koodia miten vaan ja toiset ei sitten kuin vain yhdellä tavalla koodattuna???

Tässä sitten esimerkki, ensin main ja sitten funktiokutsun kautta Aliohjelma. Kääntäjä valittaa erroria.

/****** EI TOIMI ********/

int main(){
int variable;
Aliohjelma();
}

int *Aliohjelma(){
int *pointer;
return(pointer);
}

/******END*********/


...ja tälläistä kääntäjä valittaa:
error #2120: Redeclaration of 'Aliohjelma' previously declared .... found 'int * __cdecl function(void)' expected 'int __cdecl function'.





tässä olisi sama asia toisinpäin, eli ensin Aliohjelma ja sitten main. Ja nyt toimii.


/************* T O I M I I ************/

int *Aliohjelma(){   
int *pointer;
return(pointer);
}

int main(){
int variable;
Aliohjelma();
}

/***********E N D**********/



Miksi?

3

418

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • asdasdasd

      Et ole esitellyt tuota funktiota. Mistä se kääntäjä tietäis millainen funktio se on?

      Tee tyyliin:

      int *Aliohjelma(); /* esittely, kääntäjä tietää funktion tyypin */

      int main()
      {
      Aliohjelma()
      }

      int *Aliohjelma()
      {
      int *pointer;
      /* tietty tää osoitin pitäis alustaa jne, mut en ota kantaa siihen */
      return pointer;
      }

      • aloittelija_19

        Ajattelinkin että tuo funktion esittely puuttui, mutta en vaan millään muistanu että miten se kirjoitetaan. Nyt toimii taas


      • Osoittimen alustuksen lisäksi pitää vielä muistaa asettaa siihen jotain järkevää (esim. mallocilla varattu muistialue), jos sen meinaa vielä palauttaakin funktiosta. Muuten paluuarvona on osoitin, joka ei osoita enää paljoa minnekään, joten ohjelma todnäk vain kaatuu.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nato kaatamassa Petterin haaveileman Tunnin junan?

      Nato edellyttää pohjoisessa Jäämereltä Rovaniemelle saakka kapearaitesta suoraa rautatieväylää, joka maksaa paperirahaa,
      Maailman menoa
      72
      5044
    2. Puoluebarometri: Marinin hallituksella 7 parasta mittaustulosta

      Orpon hallitusta pitää huonona 2/3 kansalaisista, joka on aika hyvin linjassa hallituspuolueiden yhteenlasketun kannatuk
      Maailman menoa
      40
      3805
    3. Donald Trump pääsi samalle listalle Sanna Marinin kanssa

      Eli vasemmistolaisen Time-median top 100 jännäihmisten listalle. https://time.com/collections/time100-next-2021/5937699
      Maailman menoa
      25
      3388
    4. Vieläkö olet

      Rakastunut minuun? Minä sinuun
      Ikävä
      79
      2391
    5. Ei siinä kauan

      Menisi jos olisimme kahden
      Ikävä
      24
      1909
    6. Grahn-laasonen taas todisti millaista porukkaa

      kokoomusloiset ovat...työttömät jäävät kuulemma kotiin nukkumaan kun naapuri lähtee töihin...eikös taannoin kokoomuslois
      Maailman menoa
      356
      1601
    7. Tekeekö hän

      Tekeekö hän sinut h*lluksi ja millä tavalla? Uusi yritys, kun edellinen aloitus poistettiin.
      Ikävä
      27
      1581
    8. Laine voitti oikeudessa

      Onnea Savonlinna! Laine voitti oikeudessa kuten arvelinkin ja lieköhän palaa valtaisuimelleen?
      Savonlinna
      40
      1542
    9. Puistotyöntekijät

      Miksi ei siivoojia näy. Näin hyvät ilmat. Voisi kerätä roskat. Onko rahat loppu. 🤔🤔🤔
      Ähtäri
      15
      1485
    10. Onko kaivatullasi iso ego? Entä sinulla?

      Vaikuttaako jommankumman ego jotenkin siihen, että ette voi lähentyä?
      Ikävä
      34
      1355
    Aihe