iDr*_*Car -2 c enums typedef bit-fields
作为bitfields的新手,我需要一些建议,以了解我在网上看过的各种例子.我想使用位域而不是位掩码来提高可读性,以及稍后为新ppl维护.
这是声明位域的常用方法:
typedef enum
{
unsigned int x: 1;
unsigned int y: 1;
}statusBits1;
Run Code Online (Sandbox Code Playgroud)
到目前为止很好,然后我看到:
typedef enum
{
unsigned int x = 1 << 0,
unsigned int y = 1 << 1
}statusBits2;
Run Code Online (Sandbox Code Playgroud)
在我的学习中,我相信这会为任何statusBits2数据类型设置默认值.这是否也将x和y的大小设置为1比特字段,如statusBits1?两者的结合是我正在寻找的.
提前致谢.
编辑:谢谢你的答案!你强迫我重读我一直在学习的东西.我正在混合各种关于位域和位掩码的帖子的信息!
即:
在Objective-C中声明和检查/比较(bitmask-)枚举
http://forum.codecall.net/topic/56591-bit-fields-flags-tutorial-with-example/
我在C#/ C++工作几年后回到C,重新学习一点点.
您的第一个示例不表示位字段.这将是一个struct而不是一个enum.
在较新的C++中,您可以为struct成员定义默认值:
typedef struct
{
unsigned int x = 1 << 0; /* Default value 1 << 0 = 1 */
unsigned int y = 1 << 1; /* Default value 1 << 1 = 2 */
} statusBits2;
Run Code Online (Sandbox Code Playgroud)
但是 - 这在标准C和较旧的C++标准中是不可能的,并且不设置字段宽度.您还可以设置字段宽度:
typedef struct
{
unsigned int x : 1; /* Field width 1 bit, no default */
unsigned int y : 1; /* Field width 1 bit, no default */
} statusBits2;
Run Code Online (Sandbox Code Playgroud)
我不知道在C和C++中都没有定义默认值和字段宽度的方法.
让我解释一下你的第二个例子的含义(正如你所写的那样enum):
你的第二个代码几乎表示枚举.这是一个整数类型,可以保存一个表示的值.例如:
typedef enum
{
fish = 3,
gorilla = 7,
rabbit = 9
} animal_t;
Run Code Online (Sandbox Code Playgroud)
是一个类型,可以有一个值3,7和9,您可以使用它们的名称,例如:
animal_t my_animal = fish;
Run Code Online (Sandbox Code Playgroud)
(实际上它也可以保存其他整数值).
枚举和结构都可以帮助您使代码更清晰,更具描述性,但不要混淆它们!
您的示例都不是有效的C或C++代码.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |