Forum: Compiler & IDEs Präprozessor Anweisung


von Peta (Gast)


Lesenswert?

Morgen,

ich würde gerne im Programmcode festlegen dürfen, ob ein bestimmter 
Bereich überhaupt kompiliert wird. Also z.B.
1
for ( ... )
2
 {
3
  Muh;
4
  }
5
if ( ... )
6
 {
7
  Mäh;
8
  }


Nun soll per Präprozessor-Anweisung ganz oben festgelegt werden können, 
ob die for-Schleife beim Compilieren durchgeführt wird oder nicht. Das 
if soll dagegen immer normal ausgeführt werden.

Kann man das machen?

von sepp (Gast)


Lesenswert?

1
#define ENABLE_FOR
2
3
#ifdef ENABLE_FOR
4
for ( ... )
5
 {
6
  Muh;
7
  }
8
#endif
9
10
11
if ( ... )
12
 {
13
  Mäh;
14
  }

Falls die For- Schleife nicht benötigt wird einfach ENABLE_FOR nicht 
definieren

von Peta (Gast)


Lesenswert?

alles klar.

kann ich das auch irgendwie idiotensicherer schreiben.. etwa so:
1
#define EIN 1
2
#define AUS 0
3
4
5
#define ENABLE_FOR EIN
6
7
8
#if (ENABLE_FOR == EIN)
9
for ( ... )
10
 {
11
  Muh;
12
  }
13
#endif


?

von Uhu U. (uhu)


Lesenswert?

Du kannst es aber auch so machen:

#define ENABLE_FOR 1

if (ENABLE_FOR)
   for ( ... ) {
      Muh;
   }

Wenn ENABLE_FOR 0 ist, entsorgt der Optimierer den gesamten Ausdruck...

von yalu (Gast)


Lesenswert?

Probier's doch einfach aus ...
... und du wirst sehen, es geht :)

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Der zweite Vorschlag generiert unerreichbaren Code - keine gute Idee... 
wuerde es so wie beim ersten Vorschlag machen.

von Uhu U. (uhu)


Lesenswert?

Michael G. wrote:
> Der zweite Vorschlag generiert unerreichbaren Code - keine gute Idee...
> wuerde es so wie beim ersten Vorschlag machen.

Das hängt vom Optimierer ab, der schmeißt unnerreichbaren Code nämlich 
raus.

Bei C++ - Templates, denen per Template-Parameter Generierungsschalter 
übergeben werden, basieren sogar ausschließlich auf diesem Prinzip.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.