Frage zu #define mit mehreren Werten, art array

Gast #3418326
Lesenswert?

Ich habe letztens irgendwo in einem code sowas hier gesehen:

#define test 10
#define MODI  255, 150, 15,test


Ich kann dazu keine näheren Infos finden.
Ich fände es sehr elegant wenn man den PWM duty cycle, im Programmkopf 
auf verschiedene modi definieren könnte.
Kann mir bitte jemand erläutern was es mit so einem #define mit mehreren 
Werten auf sich hat? Und wie man darauf zugreift?

Danke Markus
Gast #3418360
Lesenswert?

bisher habe ich einfach ein array, dass array jetzt einfach mit dem 
define zu füllen anstatt direkt mit den Werten macht nicht so einen 
großen Sinn...
Vielleicht habe ich mir da was eingebildet was gar nicht da war....

Danke
#3418376
Lesenswert?

Markus schrieb:
> bisher habe ich einfach ein array, dass array jetzt einfach mit dem
> define zu füllen anstatt direkt mit den Werten macht nicht so einen
> großen Sinn...

Das kommt drauf an. Im Zusammenspiel mit anderen Präprozessor 
Anweisungen kann das durchaus Sinn machen
1
#ifdef TEST_MODE
2
#define MODI 10, 20, 30, 40
3
#else
4
#define MODI 1, 2, 4, 5
5
#endif
6

7
uint8_t PWM_Values[] = { MODI };

je nachdem, ob das Makro TEST_MODE vor dieser Codestelle definert war 
oder nicht, wird das Array mit anderen Werten initialisiert, was zb zum 
Debuggen nützlich sein kann, weil sich bei einer 8-Bit PWM die PWM Werte 
für 10, 20, 30, 40 mit einer LED gut unterscheiden lassen, die Werte für 
1, 2, 4 und 5 aber vielleicht nicht.

Oder vielleicht 'errechnet' sich einer der Werte bereits zur Compilezeit 
aus einem anderen Wert zb der µC-Taktfrequenz die in F_CPU steht.

Ob etwas Sinn macht oder nicht, kann man nicht a priori an irgendetwas 
fest machen. Allerdings: Der Präprozessor macht Textersetzungen, ehe der 
Compiler den Programmtext zu Gesicht bekommt. Nicht mehr und nicht 
weniger. Was du dann daraus machst, ist deine Sache.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren