Frage

Ich habe eine Flaggen-Halt-Ganzzahl, die vorhandenen Flaggen vorhanden ist:

#define MAIL_ADDR_FROM  0x0001  /* address field contains the from address */
#define MAIL_ADDR_TO    0x0002  /* address field contains the to address */
#define MAIL_SEEN       0x0004  /* message has been read by the user */
#define MAIL_ATTACH     0x0008  /* message has an attachment */
#define MAIL_IMP_HIGH   0x0010  /* message is of high importance */
#define MAIL_IMP_LOW    0x0020  /* message is of low importance */
#define MAIL_FLAGGED    0x0040  /* message has been flagged */
#define MAIL_REPLIED    0x0080  /* message has been replied to */
#define MAIL_DRAFT      0x0100  /* message is a draft */
#define MAIL_NEW        0x0200  /* message is new */
#define MAIL_DELETED    0x8000  /* message is deleted */

Ich muss eine neue hinzufügen:

#define MAIL_SPAM       0x????  /* message is spam */ 

Gibt es einen Grund, warum die vorhandene Flag -Liste von 0x0200 bis 0x8000 überspringt? Mein Verständnis ist, dass nutzbare Werte für mein neues Flag 0x0400, 0x0800 und 0x1000-0x4000 sein würden. Verstehe ich etwas darüber, wie diese Bitssätze funktionieren?

War es hilfreich?

Lösung

Ja, Sie haben Recht - diese fehlenden Flaggenwerte sind theoretisch verwendet, es sei denn, sie sind für etwas anderes reserviert.

Sie müssten sich beim ursprünglichen Autor erkundigen, wenn es einen bestimmten Grund gibt, warum sie übersprungen wurden und direkt zuging zu 0x8000.

Es gibt sicherlich keine intrinsisch Verhalten in Bitfeldern, die ihre Verwendung verhindern würden.

Andere Tipps

Kurz gesagt, Ihr Verständnis ist in Ordnung.

Wir können nur erraten warum MAIL_DELETED ist 0x8000 und nicht, sagen wir, 0x0400; Ich vermute, dass das höchste Stück aufgrund der dramatischen Natur der "gelöschten" Flagge ausgewählt wurde.

Der schwierigste Teil der Einführung eines neuen Bits in die Bitmaske eines anderen ist, dass Sie sicherstellen müssen, dass die unbenutzten Teile tatsächlich nicht genutzt werden und dass sie immer konsequent initialisiert werden.

Es hängt alles davon ab, wer es geschrieben hat, was sie gemeint durch ihre gewählten Bitpositionen. Nach dem, was ich sehen kann, sieht es jedoch so aus, als hätten sie die Bitflags logisch in Bytes gruppiert.

Für Ihre könnten Sie einen Fall machen für:

#define MAIL_SPAM        0x0400 /* message is spam */

Da es wie ein Staat ähnelt wie neu oder entwurf, aber nicht gelöscht.

Ich bin mit Ihrer Anwendung nicht vertraut, aber theoretisch sind die Werte 0x400,0x800,0x1000,0x2000 und 0x4000 nicht definiert und passen perfekt zu Ihren anderen Definierungen, sodass Sie mit diesen Werten neue Definition hinzufügen können.

Klingt für mich nach schlechter Dokumentation. Ich hätte mail_flag_unused in den letzten paar Bit -Slots so platziert, dass es offensichtlich war, dass sie verfügbar waren. Überprüfen Sie, ob mail_new die höheren Bits nicht für einen eingebetteten Wert verwendet, aber auf der Oberfläche scheinen Sie eine Reihe von Bits von 0x0400 bis 0x4000 zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top