Variablen mit gleichem Namen



  • bool b = false;
    {
    	bool b = true;
    
    	b = false;
    	// Ist hier garantiert das der Compiler das innere b benutzt?
    	// Und könnte man, wenn man wollte, auch auf das äußere b zugreifen?
    }
    


  • // Ist hier garantiert das der Compiler das innere b benutzt?

    ja

    // Und könnte man, wenn man wollte, auch auf das äußere b zugreifen?

    wenns global ist mit ::b.



  • Und wenn's nicht global ist, dann schreibst du einfach den entsprechenden Namensraumbezeichner davor

    foo::b
    


  • Das ist ja super. Danke. 🙂

    Bei mir geht es darum das ich innerhalb eines Makros eine Variable benötige und damit diese nicht mit anderen Variablen, die zufällig den selten Namen haben, in Konflikt kommen kann bin ich auf die Idee mit dem neuen Block gekommen.

    Oder macht man das normalerweise anders?



  • weirdo schrieb:

    Oder macht man das normalerweise anders?

    Ja, idR verzichtet man auf Makros. Nur in ganz seltenen Fällen sind Makros wirklich notwendig. Da ich aber nicht weiss was du vorhast, kann ich dir leider nicht mehr dazu sagen.



  • Ja ich weiß. Ist aber eine der Ausnahmen. Ein eigenes Assert-Makro (damit __FILE__ und __LINE__ automatisch hinzugefügt werden).

    Und die Variable brauch ich eigentlich nur um eine Compiler-Warnung auszustellen.

    Bei MYASSERT(false) sagt der nämlich immer das der Ausdruck konstakt ist (auf höchster Warning-Stufe). Das MYASSERT(false) benutze ich nur in Destruktoren, wo man ja keine Exceptions schmeissen soll, damit ich trotzdem mitbekomme das was schiefgegangen ist. Durch Benutzung einer bool-Variable kann ich diese umgehen.



  • Für sowas könntest du dir auch 'ne Funktion schreiben:

    bool always_false()
    {
        return false;
    }
    
    //...
    MYASSERT(always_false());
    

    Das sollte die Warnung auch unterdrücken.


Anmelden zum Antworten