Forum: Mikrocontroller und Digitale Elektronik #ifdef drei möglichkeiten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Torsten (Gast)


Lesenswert?

Ich habe eine Frage wie und ob ich #ifdef verschachteln kann.
(Ich benutze AVRStudio mit WinAVR und programmiere einen ATTiny24)
Ich habe drei möglichkeiten, wovon ich immer nur jeweils Eine definieren 
möchte (der rest wird auskommentiert):
1
//#define output OP1
2
#define output OP2
3
//#define output OP3

Im nachfolgendem Programm möchte ich folgendes damit machen:
1
[...]
2
//c-code für alle (OP1, OP2 und OP3)
3
z.B. schalte LED1
4
5
#ifdef OP2 
6
#ifdef OP3 
7
//c-code für Fall OP2 und OP3
8
z.B. schalte LED2
9
#endif
10
11
#ifdef OP3
12
//c-code nur für Fall OP3
13
z.B. schalte LED3
14
#endif

Wie ist die korrekte Schreibweise bzw. Vorgehensweise?
Soweit ich weiß funktioniert eine oder Bedingung nicht (#ifdef OP2 || 
OP3)

Vielleicht hat jemand Erfahrung?
von l0wside (Gast)


Lesenswert?

Torsten schrieb:
> Ich habe eine Frage wie und ob ich #ifdef verschachteln kann.
> (Ich benutze AVRStudio mit WinAVR und programmiere einen ATTiny24)
> Ich habe drei möglichkeiten, wovon ich immer nur jeweils Eine definieren
> möchte (der rest wird auskommentiert):

Was gehen müsste, ist die Langversion von #ifdef:
1
#if (defined(OP1) || defined(OP2))
2
...
3
#elsif (defined(OP2) || defined(OP3))
4
...
5
#endif

Ohne Gewähr.
von Εrnst B. (ernst)


Lesenswert?

dann aber
1
#define OP1
2
// statt
3
#define output OP1
von Basti (Gast)


Lesenswert?

Ich würde es so machen:
1
#define OP1
2
#define OP2
3
#define OP3
4
5
code für alle
6
7
#ifdef OP2
8
hier code für op2
9
#endif
10
11
#ifdef OP3
12
hier code für op3
13
#endif

Wenn alles gemacht werden soll
siehe code oben

Wenn nur op2 gemacht werden soll
//#define OP3 auskommentieren

Man muss ja nicht in >entweder ... oder< denken. Wenn Code für OP2 und 
OP3 da ist kann man auch beides definieren.
In deinem Fall:

Torsten schrieb:
1
//#define output OP1
2
#define output OP2
3
#define output OP3
> Im nachfolgendem Programm möchte ich folgendes damit machen:
1
 [...]
2
 //c-code für alle (OP1, OP2 und OP3)
3
 z.B. schalte LED1
4
 
5
 #ifdef OP2   
6
 //c-code für Fall OP2 und OP3
7
 z.B. schalte LED2
8
 #endif
9
 
10
 #ifdef OP3
11
 //c-code nur für Fall OP3
12
 z.B. schalte LED3
13
 #endif
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.