frage zu fortran, pascal, volatile



  • Hallo allerseits,

    würde gerne etwas näher wissen, wass implementationsabhängige Schlüsselwörter wie fortran, pascal sind. Angeblich ermöglichen sie erzeugte Unterprogramme der genannten Sprachen aufzurufen...

    P.S. Wie kann man die Variablen eines anderen Programms verändern, wenn diese mit volatile deklariert wurden? Wie kann man in diesem Sinne erfahren, welche Variablen eines laufenden Programms überhaupt veränderbar sind - habe in meinem Buch, dass ich lese nur eine Anmerkung, jedoch keine näheren Informationen über diese Schlüsselwörter.



  • @clamer
    die Keywörter gibt es nicht in ISO C, vielleicht hat dein Compiler so etwas, dann benutzt man die wahrscheinlich so

    #include <stdio.h>
    
    fortran float program(int a);
    
    int main()
    {
      int i=12;
      program(i);
      printf("%d\n",i); //i sollte nun 10 sein, wenn CbR
    }
    
    c das FORTRAN Programm
       real function program(m)
       integer m
    c
       if(m .gt. 10) m=10
    c
       return
       end
    

    wobei ich da eigentlich ein Problem sehe, bei der Kombination FORTRAN C, da C nur Call-by-Value und FORTRAN nur Call-by-Reference kann.

    volatile bedeutet, dass der Compiler diese Variable nicht wegoptimieren darf und auf jeden Fall anlegen muss, dass ist wichtig, wenn man von einer anderen Programmiersprache drauf zugreifen will, da es sonst sein kann, dass der Compiler die Werte einfach in die CPU Register packt oä.

    [ Dieser Beitrag wurde am 24.10.2002 um 23:53 Uhr von kingruedi editiert. ]



  • Original erstellt von clamer:
    **
    Wie kann man die Variablen eines anderen Programms verändern, wenn diese mit volatile deklariert wurden? Wie kann man in diesem Sinne erfahren, welche Variablen eines laufenden Programms überhaupt veränderbar sind.**

    mit c alleine eigentlich garnicht das sagt dem compiler einfach das er variablen, die innerhalb von z.b. blöcken vom programm nicht verändert werden, nicht wegoptimieren darf (d.h. immer über den speicher auf den wert zu greiffen nie aus kopien in den registern).
    das spielt z.b. dann eine rolle wenn man mit einer os api oder so variablen hat die vom betreibssystem geupdated werden.

    edit: ein par kommas sind manchmal sinnvoll 🙂 (ich hasse grammatik etc. 🙄 )

    [ Dieser Beitrag wurde am 24.10.2002 um 23:56 Uhr von japro editiert. ]

    [ Dieser Beitrag wurde am 24.10.2002 um 23:57 Uhr von japro editiert. ]



  • Hi,

    soweit ich weiss, sagen 'fortran' oder 'pascal' (zumindest beim bc) nur etwas
    darueber aus, wie Argumente auf den Stack gelegt werden und wer dafuer
    verantwortlich ist, den Stack wieder aufzuraeumen (die aufgerufene Funktion
    oder die aufrufende Funktion etc.).

    Kann mich auch irren, meine aber beim bc sei das so. 'pascal' wird allerdings
    von neuen BCB's nicht mehr akzeptiert, oder zumindest beim BCB 6 nicht (musste
    ich auf der Arbeit schon feststellen).

    mfg
    v R



  • GOD IS REAL UNLESS DECLARED INTEGER



  • @vR
    weisst du den wie die Argumente dann bei fortran behandelt werden, mit den CbR und CbV?

    @Bashar
    😃 😃 😃



  • @vR
    weisst du den wie die Argumente dann bei fortran behandelt werden, mit den CbR und CbV?

    Wie das in Fortran ist, weiss ich nicht. Weiss nur, dass in Pascal die Parameter
    einer Funktion in "richtiger" Reihenfolge (so, wie man sie im Funktionskopf
    deklariert) auf den Stack gelegt werden und es der aufgerufenen Funktion
    ueberlaesst, den Stack wieder aufzuraeumen.

    In C werden die Parameter einer Funktion in "umgekehrter" Reihenfolge (also
    von rechts nach links) auf den Stack gelegt und es der aufrufenden Funktion
    ueberlaesst, den Stack wieder aufzuraeumen.

    mfg
    v R


Anmelden zum Antworten