我有一个旗帜的整数,它具有现有的一组可能的标志:

#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 */

我需要添加一个新的:

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

现有的标志列表是否一直从0x0200到0x8000跳过?我的理解是,我的新标志的可用值是0x0400、0x0800和0x1000-0x4000。我是否误解了这些焦点的工作方式?

有帮助吗?

解决方案

是的,您是正确的 - 从理论上讲,那些缺少的标志值是可用的,除非它们保留给其他东西。

如果有任何特定原因,您需要与原始作者联系 0x8000.

肯定没有 固有的 位于止于阻止其使用的位字段中的行为。

其他提示

简而言之,您的理解很好。

我们只能猜测为什么 MAIL_DELETED0x8000 不是,说, 0x0400;我的猜测是,由于“删除”旗帜的戏剧性,选择了最高的位。

向别人的位掩蔽中引入新的位置的最棘手部分是,您需要确保看起来未使用的位实际上是未使用的,并且它们总是始终如一地初始化。

这完全取决于谁写了关于他们什么 意思是 通过他们选择的位置。但是,从我看来,它们看起来像是将位标志从逻辑上分组到字节中。

对于您的,您可以为您提供理由:

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

由于它似乎是一种类似于新的或草稿,但没有删除的状态。

我不熟悉您的应用程序,但是从理论上讲,值0x400,0x800,0x1000,0x2000和0x4000未定义并完全符合您的其他定义,因此您可以使用这些值添加新定义。

对我来说听起来很糟糕。我已经将mail_flag_unused放在最后几个位插槽中,以便很明显它们可用。检查以确保mail_new不会使用较高的位用于某种嵌入式值,但是从表面上看,您似乎确实有一堆从0x4000到0x0400的位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top