Maktro define wieder löschen??
-
Habe ein funktion, in der ich ein marko verwendet will (das makro soll nur in der funktion gelten) kann ich das wieder löschen??
void funkt(){ #define MAKRO(..) ...... .. . . . . // hier maktro wieder löschen?? }
-
Klar geht das:
#undef MAKRO
-
Boris, nachdem jetzt ja mehrere Postings im zusammenhang mit Macros von Dir gekommen sind...
Deine Vorstellung von Makros ist im Ansatz falsch. Macros sind im Grunde _kein_ Sprachelement von C++, eher ein Überbleibsel aus C-Tagen.
Macros sind nichts anders als Texte, die durch den Präprozessor ersetzt werden _bevor_ der Compiler läuft. Daher haben Macros auch keinen Scope und können nicht _innerhalb_ einer Klasse oder so existieren.
Zitat aus dem Buch c++, Die Programmiersprache: Die wichtigste Regel bei Macros ist: Benutze keine, es sei denn, es ist unabdingbar. Fast jedes Macro demonstriert eine Schwäche in der Programmiersprache, im Programm oder beim Programmierer (Zitat Ende)
-
jepp .. ich ´bin mir klar über dem prinzip!!
in dem fall nehm ich ein makro um gleichen code zu vermeiden..statt ne zusätliche funktion welceh ich dann nur in diese "funk" bräuchte hab ich ein makro gemacht!!
bspw.
void funk(){ #define MAKRO(x) ...... res; switch(bla){ case A: res= MAKRO(100); break; case B: res=MAKRO( 50); break; case C: res=MAKRO(blabalbabl) break; . . . . #undef MAKRO(x) } }
-
OMG WTF
-
BorisDieKlinge schrieb:
in dem fall nehm ich ein makro um gleichen code zu vermeiden..
Den könntest du auch ohne Makro vermeiden. Ermittle in deinem switch nur den Parameter, und mache das, was MAKRO tut, dahinter.
statt ne zusätliche funktion welceh ich dann nur in diese "funk" bräuchte hab ich ein makro gemacht!!
Tu dir selbst einen Gefallen, und lass das. Mach eine Funktion draus.
-
warum machst du daraus nicht eine inline funktion ?
ist uebersichtlicher und besser in der laufzeit - der aufruf kann ja gleich bleibenalso eine funktion schreiben
int makro(int) { return x*x; }
in der klasse und feddich {x*x ist nur beispiel}
-
Wenn dir die "nur" lokale Verfügbarkeit tatsächlich so am Herzen liegt schreibst dir ne lokale Struktur! ;-P
grüße
-
die funktion makro wird aber nur in der funk verwendet... wenn ich sie inline in der klasse schreibe ist sie ja für alle funtionen der verfügbar.. wo eigentlich nicht tragisch wäre.. aber dachte es sei so eleganter...
-
Kann man eine Funktion nicht in einer Funktion definieren? Und wenn ja, waere die dann nicht eben nur in der Funtkion verwendbar?
-
Nein, aber sowas geht:
void foobar() { struct locale { int operator()( int x ) { return x*x; } }; locale func; std::cout << func( 10 ) << std::endl; }
grüße
-
die frage hab ich auch schon gestellt, und NEIN das kann man nicht...
-
David_pb schrieb:
Nein, aber sowas geht:
void foobar() { struct locale { int operator()( int x ) { return x*x; } }; locale func; std::cout << func( 10 ) << std::endl; }
grüße
Aber das kann man durchaus machen!
-
BorisDieKlinge schrieb:
die funktion makro wird aber nur in der funk verwendet... wenn ich sie inline in der klasse schreibe ist sie ja für alle funtionen der verfügbar.. wo eigentlich nicht tragisch wäre.. aber dachte es sei so eleganter...
Wo ist das Problem? Solange die hilfs-Methode private ist. Auch ein Grund eine Methode aufzuteilen ist es, das die Methode strukturierter und damit leichter lesebar ist.
void Meineklasse::Fooo() { x = berechneLimes(); wenn x < 1 zeichneKleinenLimes(); else zeichneGroßenLimes; machedies(); machejened(); machewasganzanderes(); }
Alternativ kannst du eine Funktion (ohne Klasse) in der CPP machen, die ist dann von Aussen nicht sichtbar.
-
ihr habt schon recht... die Makros sind bisher nur Test weise eingebaut... sie lieferen standart berchnugn arten mit Satischen Parametern.. später wird das ganze dünamisch gemacht über funktion.. aber zum programm testn reicht das;)