3 StructWerte auf 0 abfragen?

Gast #4416640
Lesenswert?
• ▲
▼
Meintest du (3 Werte gleichen Typs auf NULL abfragen) das?

if(leds[0].r == 0 && leds[0].g == 0 && leds[0].b == 0) { }

Dann probier dies:

if ( (leds[0].r | leds[0].g | leds[0].b) == 0 ) { }

oder das:

if ( ! (leds[0].r | leds[0].g | leds[0].b) ) { }

Falls es der Compiler nicht schon selbst optimiert, spart
man einige Verzweigungen.
Gast #4416641
Lesenswert?
• ▲
▼
struct _tagRGB
{
#ifdef (ALIGNMENT == INTEL)
   UINT8 R;
   UINT8 G;
   UINT8 B;
   UINT8 dummy;
#elif (ALIGNMENT == MOTOROLA)
   UINT8 dummy;
   UINT8 B;
   UINT8 G;
   UINT8 R;
#endif

} T_STRUCTRGB;

union RGB
{
   T_STRUCTRGB  asUINT8;
   UINT32       asUINT32;
} T_UNIONRGB;



T_UNIONRGB color;


if ( color.asUINT32 == 0 )

oder

if (   (color.asUINT8.R == 0)
    && (color.asUINT8.G == 0)
    && (color.asUINT8.B == 0))
{
}
Gast #4416650
Lesenswert?
• ▲
▼
Marion schrieb:
> kann man 3 Struktwerte auch anders auf 0 abfragen?

Warum? Damit es schwieriger zu lesen ist und die albernen 13373n Tricks 
irgendwann Bugs verursachen? So schlau wie die Heldenvorschläge hier ist 
der Compiler selbst...
1
bool is_black (const struct cRGB* p)
2
{
3
    return p->r == 0 && p->g == 0 && p->b == 0;
4
}
5

6

7
if (is_black(&leds[0])
8
{
9

10
}
Gast #4416675
Lesenswert?
• ▲
▼
Elke schrieb:
> Was genau meinst du?

Dass halbwegs aktuelle Compiler so gut optimieren können, dass man bei 
einer simplen Abfrage genau das hinschreiben kann, was man meint, und 
das Bitschubsen dem Compiler überlässt. Wenn man so programmiert, kann 
man das auch in einem Jahr noch lesen.
Gast #4416771
Lesenswert?
• ▲
▼
Da muss ich dem Tom zustimmen!

Mein Vorschlag kam, weil ich Hardware-Naher ASM-Bitfummler bin,
um GENAU zu wissen, wie viele Takte irgend eine Operation
braucht. In zeitlich eng begrenzten Anwendungen kann man damit
genau sagen, ob es noch SICHER funktioniert, oder eben MANCHMAL
nicht, wenn zufällig eine Interruptroutine mit ihre maximalen
Dauer dazwischenfunkt.

Ansonsten war ich auch schon erstaunt, wie gut mittelmäßiger
C-Code (selbst wenn er nicht so gut lesbar war, dass man nach
einem halben Jahr SOFORT sieht, worauf es ankommt) von guten
Compilern zeitlich optimiert wurde.

Ehrlich gesagt: Ich habe beim Lesen des ASM-Codes von
C-Funktionen schon einige Tricks gelernt, auf die ich nicht
so schnell selbst gekommen wäre!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.