Ist in dem Beispiel L_DOWN definiert?
1 | // Link Flags
|
2 | #define L_UP 0
|
3 | #define L_DOWN !L_UP
|
Kann man das so machen oder muss ein Wert explizit zugewiesen werden?
|
|
Forum: Compiler & IDEs #define L_DOWN !L_UPIst in dem Beispiel L_DOWN definiert?
Kann man das so machen oder muss ein Wert explizit zugewiesen werden? > Ist in dem Beispiel L_DOWN definiert? > [..] > #define L_DOWN !L_UP ^^^^^^ Ja. Das war jetzt einfach. Oder anders gfragt: Was ∗genau∗ ist das ∗eigentliche∗ Problem? Bin bei Fehlersuche über diese Konstruktion gestolpert und kann es nicht bewerten. Der Compiler beanstandet das nicht. Flag schrieb: > Kann man das so machen oder muss ein Wert explizit zugewiesen werden? Warum sollte man das nicht können? Ich würde aber zugunsten der Lesbarkeit den Wert trotzdem explizit hinschreiben. Es gibt allerdings auch keinen Grund, nicht stattdessen zu schreiben:
Es wird durch die verkomplizierte Definition nicht irgendwie "besser", "portabler" oder dergleichen. Ist es eigentlich in C definiert, was herauskommt, wenn man so etwas macht:
Oder ist das compiler-spezifisch? Bronco schrieb: > st es eigentlich in C definiert, was herauskommt, wenn man so etwas > macht:uint8_t a = !0; ja ist es. (keine Ahnung wo genau) Damit darf man auch so etwas machen uint8_t x = 2 + !0 Ich meine: Ist definiert, ob 0x01 oder 0xFF oder was-auch-immer-außer-0 herauskommt? Bronco schrieb: > Ist definiert, ob 0x01 oder 0xFF oder was-auch-immer-außer-0 > herauskommt? ja ist es, es kommt bei der verwendung immer 1 raus. (rechnen, ausgaben usw). Peter II schrieb: > ja ist es. (keine Ahnung wo genau) ISO/IEC 9899:201x: 6.5.3.3 Unary arithmetic operators. Semantics Nr. 5 (Seite 79): "The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int. The expression !E is equivalent to (0==E)." 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.
|
|