Forum: Compiler & IDEs #define L_DOWN !L_UP


von Flag (Gast)


Lesenswert?

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?

von Hunt W. (hunt_work_er)


Lesenswert?

was sagt denn dein compiler dazu?

von g457 (Gast)


Lesenswert?

> 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?

von Flag (Gast)


Lesenswert?

Bin bei Fehlersuche über diese Konstruktion gestolpert und kann es nicht 
bewerten.

Der Compiler beanstandet das nicht.

von Der (Gast)


Lesenswert?

Eventuell noch eine Klammer um !L_UP setzen.

von Helfender (Gast)


Lesenswert?

Dann probier halt mal

printf("L_UP=%d, L_DOWN=%d\n", L_UP, L_DOWN);

von Rolf Magnus (Gast)


Lesenswert?

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.

von Flag (Gast)


Lesenswert?

Danke, die Frage ist beantwortet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Es gibt allerdings auch keinen Grund, nicht stattdessen zu schreiben:
1
#define L_UP  0
2
#define L_DOWN  1

Es wird durch die verkomplizierte Definition nicht irgendwie "besser",
"portabler" oder dergleichen.

von Bronco (Gast)


Lesenswert?

Ist es eigentlich in C definiert, was herauskommt, wenn man so etwas 
macht:
1
uint8_t a = !0;
Oder ist das compiler-spezifisch?

von Peter II (Gast)


Lesenswert?

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

von Bronco (Gast)


Lesenswert?

Ich meine:
Ist definiert, ob 0x01 oder 0xFF oder was-auch-immer-außer-0 
herauskommt?

von Peter II (Gast)


Lesenswert?

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).

von apr (Gast)


Lesenswert?

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.