Gast
#3014048
Hallo hab mal ne Frage, nur so zur persönlichen Weiterbildung Beispiel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Wie müsste das define aussehen damit die Farbwerte für rot im struct RGB stehen? Gruß Adrian
|
Anzeige
|
Makro zum Initialisieren von Werten in struct
Gast
#3014048
Hallo hab mal ne Frage, nur so zur persönlichen Weiterbildung Beispiel:
Wie müsste das define aussehen damit die Farbwerte für rot im struct RGB stehen? Gruß Adrian Je nach deiner Interpretation der Farbwerte z.B. so:
#define red {255,0,0}
Gast
#3014087
Hab ich schon probiert, beim umspeichern bekomme ich dann Probleme
Fehlermeldung für die zweite Zeile:
> Error 1 expected expression before '{' token
Was mache ich in dem Fall falsch?
ruud86 schrieb: > Hab ich schon probiert, beim umspeichern bekomme ich dann Probleme > >
> > Fehlermeldung für die zweite Zeile: > >> Error 1 expected expression before '{' token > > Was mache ich in dem Fall falsch? Logisch. Makros sind ja keine Zauberstäbe. Makros machen Textersetzung. Nicht mehr. #define red { 10, 50, 90 } RGB_t RGB = red; ist deswegen ok, weil die Syntax zur Initialisierung eines struct nun mal so aussieht
Ob du jetzt den Klammerteil direkt hinschreibst, oder ob du den durch ein Text Suchen&Ersetzen vom Präprozesser einsetzen lässt, ist dem Compiler ja wurscht. Der kriegt nur das Endergebnis (die letzte Form) zu sehen und das ist syntaktisch korrekt. Wohingehend die Zuweisung
syntaktisch nicht korrekt ist. Und daran ändert sich auch nichts, wenn du den Klammerteil nicht direkt hinschreibst, sondern hinter einer Textersetzung in Form eines Makros versteckst. Makros sind keine Wunderwuzzi. Sie machen nur Textersetzungen. Das was bei dieser Textersetzung herauskommt, muss syntaktisch korrekt sein. Daran ändert auch ein Makro nichts.
Gast
#3014121
Ah stimmt danke, da war mal was... Das kommt davon,wenn zu lange mit Labview arbeitet. Gibt es eine Möglichkeit das Makro zu schreiben, dass ein umspeichern geht? Danke schon Mal für die Nachhilfe ;) Gruß ruud86 schrieb: > Hab ich schon probiert, beim umspeichern bekomme ich dann Probleme > >
> > Fehlermeldung für die zweite Zeile: > >> Error 1 expected expression before '{' token > > Was mache ich in dem Fall falsch? Initialisieren ist nicht zuweisen. RGB kann über ein Literal (das was in {..} steht) initialisiert werden, aber erst ab C99 gibt es die Möglichkeit, struct-Literale in Ausdrücken zu verwenden. Du kannst dann "RGB=(RGB_t)red;" schreiben, was "RGB=(RGB_t){255,0,0};" entspricht. Du kannst dann übrigends auch "someFunction((RGB_t){255,255,0});" machen und so was. Wenn dein Compiler es kann, dann definiere red so:
GCC kann diese Schreibweise schon länger, kann also gut sein, dass es bei dir auch funktioniert.
Gast
#3014136
super danke Marco M. schrieb: > Wenn dein Compiler es kann, dann definiere red so: > > #define red ((RGB_t){255,0,0}) > > > GCC kann diese Schreibweise schon länger, So wie jeder andere C99-Compiler: http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html Für Makronamen sollte man eher Großbuchstaben verwenden und für Variablen hingegen Kleinschreibung wählen. Hat sich so eingebürgert und damit wird die Quelle besser verständlich. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|