(C++) volatile ?!



  • Hallo Forum,

    /* Variable fuer TIMER.C */
    volatile ULONG tic10;

    Was ist und macht "volatile" ?!

    Schreibe in C unter Win32 mit VC++.

    mfg Oliver kern.



  • volatile macht eine Eigenschaft (Variable) einer static-Klasse non-static.



  • Das wäre mir neu.

    volatile ist vergleichbar mit const; es ist ein Qualifier, den man schlecht wegcasten kann.
    AFAIK ist die Aussage: "Lieber Compiler, steck diese Variable nicht in irgendwelche Register, denn du weißt nicht, wann sie sich spontan verändert."

    Bei Klassen fällt mir nur das ein:
    Man kann auch member-funktionen volatile machen, so in der Art:

    class A
    {
      void foo() volatile;
      volatile int a;
      int b;
    };
    

    Ist dann ähnlich wie const, wie oben schon gesagt...
    Das bewirkt, dass du aus A::foo() jetzt nur noch auf a, aber nicht mehr auf b zugreifen kannst.

    Wobei mir nicht ganz klar ist, wofür man member-funktionen (und damit den this-Zeiger) volatile deklarieren müsste. Kennt jemand einen konkreten Anwendungsfall?

    [ Dieser Beitrag wurde am 30.06.2003 um 20:13 Uhr von cd9000 editiert. ]



  • Danke aber warum funktioniert der Codeauschitt unter linux und nicht unter win32 ?!

    /*Global Variablen*/
    unsigned short zeit;
    unsigned long lastic;
    volatile unsigned long tic10;
    /******************/

    /*Codeauschnitt*/
    zeit = (unsigned short) (tic10-lastic);
    if (zeit != 0)
    {
    /***************/

    in der zeile:

    zeit = (unsigned short) (tic10-lastic);

    bleibt das programm stehen wo es unter Linux funktioniert.

    aendere ich das auf
    zeit = (unsigned short) (1-lastic);

    geht es zwar - ist aber nicht sinn und zweck.

    mfg Oliver Kern



  • Dann mach halt tic10 non-volatile 🙄



  • geht auch nicht.

    mfg Oliver Kern



  • Dann liegt der Fehler woanders.
    Wo wird tic10 denn verändert?



  • volatile würd ich am ehesten mit "Compiler untersteh dich da irgendwas dran zu optimieren sonst gibts Tote" bezeichnen.
    Klappt zwar nicht immer, aber du hast ihn gewarnt und 'meistens' funktioniert es auch.

    und tic10 wird ein dem obigen Codeausschnitt nicht verändert, ob das beim Rest der Fall ist muss aber wer sagen dessen Kristallkugel grad nicht zur Reperatur ist. 😃



  • Sehe da nichts Konsolenspezifisches...

    Verschoben nach C++.

    MfG SideWinder


Anmelden zum Antworten