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

393

    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. Mitkä asiat

      tekevät vaikeaksi kohdata kaivattusi?
      Ikävä
      72
      812
    2. Miltä se tuntuu

      Miltä se tuntuu havahtua, että on ollut ihmistä kohtaan, joka on rakastanut ja varjellut, täysi m*lkku? Vai havahtuuko s
      Ikävä
      104
      678
    3. 35
      547
    4. Haluaisitko oikeasti

      Vakavampaa välillemme vai tämäkö riittää
      Ikävä
      46
      540
    5. Pidit itseäsi liian

      Vanhana minulle? Niinkö?
      Ikävä
      40
      535
    6. En mahda sille mitään

      Olet ihanin ja tykkään sinusta todella paljon.
      Ikävä
      29
      532
    7. Rakas

      Eihän se tietysti minulle kuulu, mutta missä sinä olet? 😠
      Ikävä
      31
      520
    8. Joko olet luovuttanut

      Mun suhteen?
      Ikävä
      50
      500
    9. Mitä se olisi

      Jos sinä mies saisit sanoa kaivatullesi mitä vain juuri nyt. Ilman mitään seuraamuksia yms. Niin mitä sanoisit?
      Ikävä
      31
      480
    10. Sinunkin pitää jättää

      Se kaivattusi rauhaan.
      Ikävä
      35
      434
    Aihe