Globale Variable in Funktion überschreiben



  • Mein Problem ist ich brauche eine global Varible, die ich in einer Funktion überschreiben möchte, die Variable muss global sein, da sie von mehreren Funktionen verwendet wird und mit dem einem startwert initialisiert werden soll.

    WORD FC=0x0000;
    
    void FC()
    {
    Fc=Fc+1;
    }
    

    die Funktion FC soll mehrfach aufgerufen werden, und dabei jeweils um eins erhöht werden.

    Gibt es da eine Möglichkeit?



  • Hallo

    siehe Modifizierer extern in den FAQ

    bis bald
    akari



  • bigborre schrieb:

    Mein Problem ist ich brauche eine global Varible, die ich in einer Funktion überschreiben möchte, die Variable muss global sein, da sie von mehreren Funktionen verwendet wird und mit dem einem startwert initialisiert werden soll.

    WORD FC=0x0000;
    
    void FC()
    {
    Fc=Fc+1;
    }
    

    die Funktion FC soll mehrfach aufgerufen werden, und dabei jeweils um eins erhöht werden.

    Gibt es da eine Möglichkeit?

    //fc.h

    WORD getFC();
    void FC();
    

    //fc.cpp

    static DWORD dwFC = 0x0000;
    
    WORD getFC()
    {
      return dwFC;
    }
    
    void FC()
    {
      dwFC = dwFC+1;
    }
    


  • @bigborre: Du solltest so einen Scheiss wie "WORD" lassen und stattdessen int benutzen.



  • Das musste schon mir überlassen, ich weiß schon wann ich welchen Ttyp verwende, und WORD ist durchaus nützlich.
    Kleiner Tip für dich, WORD ist ein Integer bloß 16 Bit.

    @akari und ssm Danke, von euch kommen wenigstens nützliche Vorschläge, ich probier das gleich mal.



  • short ist auch ein Integer bloß 16 Bit, aber immer noch besser als WORD - das erinnert so sehr an die Win32 und wenn du dazu stehst dann geh ins WinAPI-Forum, wir sind hier in Standard C++.



  • Das Problem ist nur, wenn man short verwendet, kann die Größe von Plattform zu Plattform variieren, das kann einen bei WORD nicht passieren, weil WORD ganz genau in seiner Größe festgelegt ist. Short dagegen nicht.

    EDIT: Allerdings finde ich __int16 noch schöner, weils auch als Schlüsselwort gilt und entsprechend gefärbt wird 🙂



  • und WORD ist durchaus nützlich

    Glaub ich übrigens nicht, jedendenfalls nicht besser als ein normaler 32Bit int. 32Bit Prozessoren brauchen längere Zeit um Anomalien wie short anderswo unterzubringen.



  • viande schrieb:

    Das Problem ist nur, wenn man short verwendet, kann die Größe von Plattform zu Plattform variieren, das kann einen bei WORD nicht passieren, weil WORD ganz genau in seiner Größe festgelegt ist. Short dagegen nicht.

    EDIT: Allerdings finde ich __int16 noch schöner, weils auch als Schlüsselwort gilt und entsprechend gefärbt wird 🙂

    Da gibt es nur ein Problem : WORD ist WinAPI spezifisch. Also wenn's du glaubst WORD mehr protabel den int dann irrst du gewaltig.



  • Irgendwer schrieb:

    viande schrieb:

    Das Problem ist nur, wenn man short verwendet, kann die Größe von Plattform zu Plattform variieren, das kann einen bei WORD nicht passieren, weil WORD ganz genau in seiner Größe festgelegt ist. Short dagegen nicht.

    EDIT: Allerdings finde ich __int16 noch schöner, weils auch als Schlüsselwort gilt und entsprechend gefärbt wird 🙂

    Da gibt es nur ein Problem : WORD ist WinAPI spezifisch. Also wenn's du glaubst WORD mehr protabel den int dann irrst du gewaltig.

    Mh, wusste ich gar net, da ichs noich nie benutzt habe 😉 Aber so wird man schlauer, dann halt weiter __intxx 🙂



  • WORD ist auf jeder Platform die Registerweite. D.h. i386-i686 32 bit



  • viande schrieb:

    Irgendwer schrieb:

    viande schrieb:

    Das Problem ist nur, wenn man short verwendet, kann die Größe von Plattform zu Plattform variieren, das kann einen bei WORD nicht passieren, weil WORD ganz genau in seiner Größe festgelegt ist. Short dagegen nicht.

    EDIT: Allerdings finde ich __int16 noch schöner, weils auch als Schlüsselwort gilt und entsprechend gefärbt wird 🙂

    Da gibt es nur ein Problem : WORD ist WinAPI spezifisch. Also wenn's du glaubst WORD mehr protabel den int dann irrst du gewaltig.

    Mh, wusste ich gar net, da ichs noich nie benutzt habe 😉 Aber so wird man schlauer, dann halt weiter __intxx 🙂

    Wobei __intxx VC spezifisch ist. Portabel ist int oder short.



  • spjoe schrieb:

    WORD ist auf jeder Platform die Registerweite. D.h. i386-i686 32 bit

    das ist DWORD 😉 , WORD hat auf 32bit systemen afaik nur 16bit

    das erinnert so sehr an die Win32 und wenn du dazu stehst dann geh ins WinAPI-Forum, wir sind hier in Standard C++.

    wusste nicht, dass typedefs nichtmehr zum standard gehören 🙄



  • Ich habs Immer so kennen gelernt, dass WORD = 2 Byte und DWORD = 2*WORD = 4 Byte. Ich hab übrigens grad mal geguckt, also, Dev-Cpp hat auch __intxx 🙂
    Dummerweise ist das auch nur ein typedef, aber mir ist gerade eingefallen, dass es ja bei Boost sowas gibt: <boost/cstdint.h>. Das benutzt dann <stdint.h> vom jeweiligen System, sofern vorhanden. Damit hat man dann absolute Sicherheit 😉



  • Wenn irgendwo WORD 2Byte groß ist, dann ist das auf der Plattform möglicherweise Tradition, da sie mal 16bittig war (oder noch ist).

    Auf 32Bit-Maschienen ist die Wortbreite jedenfalls 32Bit. (Daher der Name 32-Bit Maschiene.)
    Wenn WORD dann aber nur ein halbes Wort breit ist ist das möglicherweise sogar iritierend. Da in der Regel wohl aber nur Leute damit arbeiten werden, die sich auf der Plattform auskennen (sonst käme man wohl nicht auf die Idee überhaupt den misteriösen Typ WORD zu verwenden) ist das kein Problem.

    DWORD würde ich als Double-Word interpretieren. Deswegen würde ich vermuten, das der Typ zwei Worte breit ist.



  • stimmt helium...die winapi war doch mal 16bittig, und da ms die ganzen alten codes nicht wegschmeissen wollte, haben sie WORD die alte größe beibehalten lassen und dafür dann DWORD eingeführt....

    [/hypothese]



  • mh, daher kommt das 💡
    Weil ich kenne das nämlich nur von Datenpaketen, dann wird das wohl auch von den Windowssockets kommen ... Naja, da ich wie gesagt, das aber eh nie nutze, is mir das auch wurscht :p


Anmelden zum Antworten